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

标签 c++ c pointers address-operator

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

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() 不会初始化指针,但编译器没有足够的信息来区分两者。

关于c++ - address of operator 可以初始化一个指针但是填充的值是垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49465753/

相关文章:

从结构指针复制到C中数据库的结构指针

c++ - 从 'void*' 到指向非 -'void' 的指针的转换需要显式转换(第 17 行)

java - 字符串的有序固定长度组合

C++ 从另一个类调用( vector )指针返回空大小

c++ - dll中的xmlrpc服务器,向自己发送信号?

c - GtkTextView 中的自动完成/建议弹出菜单

c - 如何重新加载系统守护进程?

pointers - 为什么所有嵌套的结构体对象在打印出来时都有相同的地址?

c++ - 属性QtObject marginHints:QtObject {…}

c - 将节点添加到单链列表的中间