全局静态指针问题

Ove*_*r10 2 variables pointers visual-studio-2010 visual-c++

从复杂的情况来看,这是一个相当大的问题.我有一个静态指针坐在我的一个头文件中.哪个被包含在各处,这就是我把它作为静态指针的原因.这样我就可以在我的main函数中快速初始化它,以便其他文件可以使用它.

问题是这个,即使在我初始化它并把东西放入其中之后.其他文件只能找到NULL.就像包含带有静态指针的头文件的每个文件都为自己创建一个副本,即使其他人初始化它,每个文件都有自己独立的副本.否定当然,有一个全局变量的目的.

我怎么能应付这个?也许我理解一个静态变量错了,或者可能是因为它是一个指针?

我应该将其声明为:&variable = 5; 或者只是变量= 5; 或&变量=(int)5?

Jam*_*lis 12

这就像每一个包括与静态指针头文件使得它的一个副本为自己,甚至当别人初始化,每个文件都有自己单独的副本.

static就是当应用于命名空间范围内的变量时的意思:变量被赋予内部链接,使其成为给定转换单元(源文件)的"本地".

如果static在头文件中有一个名称空间作用域的变量,并且您将该头文件包含在多个.cpp文件中,则该变量将有多个实例:每个包含头文件的.cpp文件一个.

如果您想要一个跨多个源文件共享的全局变量,则需要进行此操作extern.在头文件中将变量声明为extern,然后在一个.cpp文件中定义extern变量.


wil*_*ilx 7

是的,您理解static关键字错误.命名空间和文件范围内的静态关键字声明了一个变量,该变量仅在声明它的转换单元(基本上是单个.cpp文件及其所有包含)中可见.通过在多个.cpp文件中使用的标头中声明一个静态变量,您可以有效地定义多个变量.

如果你想要一个全局指针,那么在extern没有static单个头文件的情况下声明它,并在没有externstatic在单个.cpp文件中定义它.例如:

在foo.h中:

extern int * p;
Run Code Online (Sandbox Code Playgroud)

并在main.cpp中:

int * p = something;
Run Code Online (Sandbox Code Playgroud)