C中的全局指针?

我知道指针通常在声明时分配,但我想知道是否有任何方法可以在C中创建一个全局指针。例如我的代码如下:这是一个好习惯吗?

static int *number_args = NULL; void pro_init(int number) { number_args = &number; /* initialize the pointer value -- is this okay? */ } 

  1. 避免全局 – 他们是一个坏主意,通常会导致问题。
  2. 您正在堆栈上获取变量的地址。 这将在某个地方重新使用,从而产生意想不到的结果。

如果你觉得有必要(为什么?)有一个全局指针,那么如果离开堆就会初始化。

这是有效的。 拥有全局变量有很多充分的理由,尤其是静态全局变量。 但是,如果某些事情不需要是全球性的,那么最好不要让它成为全球性的。

还要记住,如果多个线程访问该变量,您需要以某种方式保护它,可能使用互斥锁,或者您可能有竞争条件。

另外,请记住“number”是一个堆栈变量。 函数和局部变量的参数都在堆栈上分配,并且不再存在于其范围之外。 因此,除非“pro_init()”永远不会返回,或者在返回之前将变量设置回NULL,否则最终会出现无效指针。

您可以使用堆内存,例如:

 number_args = malloc(sizeof(int)); if (number_args == NULL) { /* handle malloc error */ } *number_args = number;