C语言高手请进我有一个这样的问题:

main()
{
int *p=1;
printf("%d",*p);
printf("%d",p);
printf("%d",*p+1);
printf("%d",p+1);
}
请问为什么会得到下面的结果
1 0 3 1
请高手指点一下呀

一:首先你的程序有错,根本不能运行:如:int *p=1;由此可知,你所写的结果是假的,呵呵
二:printf("%d",p); 即使能输出也不可能输出0,呵呵,你是在考别人的汇编吗?地址0可以这样轻易地分给你?黑客也难
三:printf("%d",p+1); 即使输出也不可能比0只大1的,您的电脑用的是51系列的,呵呵,只能说明,过时了,int型怎么可能就占用一个字节?char型的话,逻辑上才能正确
四 给你修改下:
#include<stdio.h>
main()
{
char a=48,*p=&a;
printf("%d ",*p);
printf("%d ",p);
printf("%d ",*p+1);
printf("%d ",p+1);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-09-08
你用的是什么编译器呀,我怎么运行也得不到你的结果,
在TC里运行是
0113
在VC++里面编译根本通过不了
第2个回答  2007-09-08
下次问问题,记得写出程序的意图.

main()
{
int *p=1; /*你的指针p,指向哪个变量呢,既然p没有指向变量,那么1的值赋给谁呢?*/
printf("%d",*p); /*最好在%d后面上\n或某个符号,否则输出的结果,你自己都看不清*/
printf("%d",p);
printf("%d",*p+1);
printf("%d",p+1);
}

将你的程序,作了如下改动:
main()
{
int a,*p;
p=&a;*p=1;
printf("%d\n",*p);
printf("%d\n",p);
printf("%d\n",*p+1);
printf("%d\n",p+1);
}
结果为
1
-52
2
-50

由于-52 -50为指针p所指向变量a的地址.这个值是在我的电脑上得出的结果.你运行后结果可能不同.
相似回答