[英]Pointer behaviour gives value as 1
需要明确的是,我知道 C 中指向指针概念的指针以及取消引用双、三指针。 我唯一的疑问是在我编写的以下程序中:
#include<stdio.h>
int main(){
int a;
int* p;
a=5;
p=&a;
int **q;
printf("*p=%d\n",*p);
printf("*q=%d\n",*q);
}
现在我知道了,这个程序很愚蠢,毫无意义,但这不是问题所在。 问题是为什么? 为什么输出是这样的:
*p=5
*q=1
为什么每次运行都是 *q=1? 还要记住,如果我现在声明 ***r; 并添加以下行:
printf("*r=%d\n",*r);
现在输出是:
*p=5
*q=-40821602 //garbage
*r=1
现在,*r=1。 为什么? **** 也一样。 在这种情况下,*q,*r 是垃圾并且 *s=1。 为什么?
评估未初始化的指针是未定义的行为,这就是您所做的。 cppreference声明了以下未定义行为:
未定义的行为:
- 未定义的行为 - 对程序的行为没有限制。 未定义行为的示例包括数组边界之外的内存访问、有符号整数溢出、空指针取消引用、在没有序列点的表达式中多次修改同一标量、通过不同类型的指针访问对象等。不需要诊断未定义的行为(尽管诊断了许多简单的情况),并且编译的程序不需要做任何有意义的事情。
因此,您不能期望从您的程序中得到任何有意义的东西。 它可能会打印 1,但它也可以做任何其他事情。 例如,就我而言,它只是崩溃了。
那么问题“为什么?” 根本不是一个有效的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.