| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1330 人关注过本帖
标题:[讨论]指针问题
只看楼主 加入收藏
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
我好要感谢某某某```是他提供的````
``连提供者的名字都忘了 ````真不应该啊```




女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-09-09 21:01
lylucia
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-9-5
收藏
得分:0 
以下是引用死了都要C在2007-9-9 20:24:00的发言


#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;
}
根据你的代码,我也测试了,按你所测试的步骤来做的。编辑器
wintc
第一次测试代码:


把 printf("%d\n",*q);换成 printf("%d\n",**q) 结果:5
29301



第二次测试代码:去掉 p=1,结果是 5
29301
;

第三次测试代码和第四次测试代码: 只去掉 *q=2;得到的结果是 5
29301
第五次测试代码:
只去掉 *p=5; 得到的结果是 0
0


最后一次
:#include<stdio.h>

int main()
{
int n=0,*p=&n,**q=&p;


printf("%d\n",*p);
printf("%d\n",**q);

getchar();
return 0;
}

结果表明也是:0
0




2007-09-09 21:53
lylucia
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-9-5
收藏
得分:0 

为什么会出现这样的情况???


2007-09-10 13:50
jinxin3256
Rank: 1
等 级:新手上路
帖 子:196
专家分:0
注 册:2007-9-7
收藏
得分:0 
9楼的东东看不太明白。。

代替leisure1980广告下: 群号45146331
2007-09-10 15:02
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 

不会吧``p=1;
*q=2;
q=p;

这3句在WINTC里能通过便宜````????


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-09-10 16:52
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
回复:(lylucia)[讨论]指针问题

第一次测试:

代码虽然能通过```但是出现了警告:

警告 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编辑过]


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-09-10 18:14
lylucia
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-9-5
收藏
得分:0 

谢谢了
我都看明白了
上次我测的时候就只看到编译成功又得出结果,没注意警告。。。。
我也准备换掉WIN-tc了


2007-09-11 11:15
devfhpgah
Rank: 1
来 自:江西
等 级:新手上路
帖 子:204
专家分:0
注 册:2007-8-16
收藏
得分:0 
那有什么编译器会比较好点呢!

努力才会成功!
2007-09-12 17:50
郑德志
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-9-10
收藏
得分:0 

死了都要c分析的很好!!!!!!顶一下!!!

2007-09-15 12:14
快速回复:[讨论]指针问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039039 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved