0

指向未初始化内存的指针将导致错误。引用此类指针表示无效地址。

int *pi;                                                                                                                                                          
printf("%i\n",*pi);  

上面的代码导致使用未初始化的变量错误。

error: ‘pi’ is used uninitialized in this function

但是,首先打印地址时,似乎指针由有效地址初始化但填充了无效数据

int *pi; 
printf("%p\n",&pi); //address printing                                                                                                                                                       
printf("%i\n",*pi); 

打印出来:

0x7ffeea9313c8 //valid virtual address
-125990072 //invalid data

问题

运算符 (&) 的地址是否初始化指针?如果不是,请纠正错误的理解。

4

1 回答 1

4

因为你将这个指针的地址传递给一个函数,编译器不再能判断它是否已经在那个函数内部被初始化。

考虑以下函数:

void init_ptr(int **ptr) { *ptr = some_valid_addr; }

然后你打电话:

int *pi; 
init_ptr(&pi);

您知道printf()不会初始化指针,但编译器没有足够的信息来区分。

于 2018-03-24T14:30:05.943 回答