auto变量地址初始化static静态指针的一些事
前网易架构师-高司机 游戏服务器领域优质创作者 博客专家认证 2013-08-14 09:43:49 在C语言中如果我们用auto变量地址初始化static静态指针是不对的。
例如:
#include <stdio.h>
int main(){
int a=0;
static int*p=&a;
return 0;
}
==[223]==root@gaoke:~$gcc -o test gaoke.c
gaoke.c: In function ‘main’:
gaoke.c:4: error: initializer element is not constant
我认为是因为static变量的内存是在编译期间就已经确定的,但是这里p指向的是a的地址,在编译期间,a的内存还没有分配,导致出错
但是c++呢??我们来看一看
#include <iostream>
using namespace std;
int main(){
int a=10;
static int*p=&a;
cout<<*p<<endl;
return 0;
}
==[223]==root@gaoke:~$g++ -o test test.cpp
==[223]==root@gaoke:~$./test
10
这个又作何解释?如果是编译器的原因,而不是语言本身怎么解释?