C语言的一个指针问题

来源:百度知道 编辑:UC知道 时间:2024/07/08 09:39:46
main()
{
int x,*p;
p=&x;
printf("%c",*p);
}
为什么输出的结果是 9 呢?

main()
{
int x,*p;
p=&x;
printf("%c",*p);
}

运行的结果不一定!!!
x没有初始化,而p指向x,*p的值就是x.而输出的时候,以字符形式输出,那么说明,x在内存里原来的值是'9'所对应的ASCII码。也就是说x的值是它非配到的内存原来的值,由于原来的值我们一般不能确定,可以说它是“随机”的,这中随机性,不是纯粹的随机。(也就是说,有可能是9,但如果一旦是别的数字,你连续多次运行后一般都是那个数字。当你再定义这样的一个变量,也没有初始化,它输出的值你也不知道,这样可以理解为随机的。)

而且在不同的编译平台上,你上面的程序的结果不一样,因为你没有初始化。

要得到稳定的结果:9
必须初始化!!如:

main()
{
int x='9',*p;
p=&x;
printf("%c",*p);
}

另外,在其他编译环境里,可能不初始化,就会在编译的时候报错的!!!
*************************************
通过这个例子,你应该学习到:变量要初始化后,再进行其他运算。否则,结果无法预料。
*************************************

你的程序有问题,你的X没有赋值,那麼X存取的可能是任何的值,然后你将X的地址赋值给P,然后采用字符输出P地址所对应的值,其实就是将整型X以字符的形势输出。如果你的X=65,那麼输出应该为A,至於你的输出9应该是随机的。