address of operator 可以初始化一个指针但是填充的值是垃圾

Address of operator can initlize a pointer but the fill-in value is garbage

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

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

问题

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

因为您将 this 指针的地址传递给函数,所以编译器无法再判断它是否已在该函数内部初始化。

考虑以下函数:

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

然后你打电话:

int *pi; 
init_ptr(&pi);

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