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()
不会初始化指针,但编译器没有足够的信息来区分它们。
指向未初始化内存的指针会导致错误。引用此类指针表示无效地址。
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()
不会初始化指针,但编译器没有足够的信息来区分它们。