我知道指针通常在声明时分配,但我想知道是否有任何方法可以在C中创建一个全局指针。例如我的代码如下:这是一个好习惯吗?
static int *number_args = NULL;
void pro_init(int number)
{
number_args = &number; /* initialize the pointer value -- is this okay? */
}
答案 0 :(得分:7)
如果你觉得有必要(为什么?)有一个全局指针,那么如果离开堆就会初始化。
答案 1 :(得分:1)
这是有效的。拥有全局变量有很多充分的理由,尤其是静态全局变量。但是,如果某些事情不需要是全球性的,那么最好不要将其全球化。
另请注意,如果多个线程访问该变量,您需要以某种方式保护它,可能使用互斥锁,或者您可能有竞争条件。
另外,请记住“number”是一个堆栈变量。函数和局部变量的参数都在堆栈上分配,并且不再存在于其范围之外。因此,除非“pro_init()”永远不会返回,或者在返回之前将变量设置回NULL,否则最终会出现无效指针。
您可以使用堆内存,例如:
number_args = malloc(sizeof(int));
if (number_args == NULL) { /* handle malloc error */ }
*number_args = number;