``连提供者的名字都忘了 ````真不应该啊```
女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
#include<stdio.h>
int main()
{ int n=0,*p=&n,**q=&p;
p=1;
*q=2;
q=p;
*p=5;
printf("%d\n",*p);
printf("%d\n",*q);
getchar();
return 0;
}
根据你的代码,我也测试了,按你所测试的步骤来做的。编辑器
int main()
{
int n=0,*p=&n,**q=&p;
printf("%d\n",*p);
printf("%d\n",**q);
getchar();
return 0;
}
结果表明也是:0
0
第一次测试:
代码虽然能通过```但是出现了警告:
警告 noname.c 7: 不可移动的指针(地址常数)赋值在 main 函数中
警告 noname.c 8: 不可移动的指针(地址常数)赋值在 main 函数中
警告 noname.c 9: 指针转换后指向其它类型在 main 函数中
结果: 5 5 第1个5你能明白吧(*p=5;)```
第2个5``通过警告9我个人认为WINTC把
q转换为一级指针了``再加上q=p;`所以
第2个也是5```
换了printf("%d\n",**q)后(警告没变):
结果:5 29301
得到5的原因不变,q转换为一级指针了(个人
认为)*q是5``而*(*q)这时把把5当成地址``
指向了5这个地址里面的值(29301)
第二次测试:
警告 noname.c 7: 不可移动的指针(地址常数)赋值在 main 函数中
警告 noname.c 8: 指针转换后指向其它类型在 main 函数中
结果:5 29301. 分析方式和第一次一样``虽然去掉了p=1;
但是q=p;*p=5没有变啊``所以和上次一样
第三次测试和第四次测试:
警告 noname.c 7: 不可移动的指针(地址常数)赋值在 main 函数中
警告 noname.c 8: 指针转换后指向其它类型在 main 函数中
结果:5 29301. 分析方式和第一次一样``虽然去掉了*p=2;
留下p=1,但是q=p;*p=5没有变啊``所以和上
次一样``(我们可以发现)`决定*P和**q的值
的语句是q=p;和*p=5```
第五次测试:
警告 noname.c 7: 不可移动的指针(地址常数)赋值在 main 函数中
警告 noname.c 8: 不可移动的指针(地址常数)赋值在 main 函数中
警告 noname.c 9: 指针转换后指向其它类型在 main 函数中
结果: 0 0 分析:n=0和*p=&n导致了*p的值是0
因为*p是0所以*(*p)=>*(0)=>0
地址值0是个特殊的地址``指向它
得到结果是O``在C语言里地址值0
用NULL替换(在宏定义中)``所以结果是
0和0.
最后一次:
编译通过.
结果:0 0. 分析:n=0,*p=&n,**q=&p;就看这句话就行了.
以上说明: 一般的数不能赋给指针变量````不同级别的指针在赋值回把高级指针转换为低级指针(个人认为)``
WINTC不好``连算250*250都得不到正确答案``结果还是负的``我用的还是long存放``
你用DEV-C++吧```www.bloodshed.net``用4.9.9.2的``
[此贴子已经被作者于2007-9-10 18:15:10编辑过]