| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 724 人关注过本帖
标题:一个关于指针数组的问题,弄不懂。
只看楼主 加入收藏
woai_kmust
Rank: 2
等 级:论坛游民
帖 子:29
专家分:41
注 册:2011-8-31
收藏
得分:0 
回复 6楼 penghao511
main()
{char *p="000",*p1="000",*p2="000";
printf("%x %x %x",p,p1,p2);
}
为什么p=p1=p2.
2011-09-01 22:08
Luminal
Rank: 6Rank: 6
等 级:侠之大者
帖 子:140
专家分:470
注 册:2011-8-24
收藏
得分:0 
在vc6.0下调试的,关于楼主的问题:

是被编译器优化了,如果用debug版的就不会被优化,楼主应该是用release形式编译的,
该种情况下,编译器要对代码进行优化的,
估计被优化的原因是因为
{char *p[3]={{"000"},{"000"},{"000"}};
中的3个字符串相同,被理解成为是同一个字符串了,同一个字符串的内存地址是相同的
所以就有了楼主的疑问,也许是编译器的一个bug!!
不知这些对楼主是否有用,
2011-09-02 09:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 12楼 Luminal
这是编译器自主的,没有硬性规定,这种优化冒着违反程序设计者意愿的风险,万一设计者真要三个不同的地址呢。作为程序设计者来说,也不要倚赖这种不确定的结果——如果没把握切实达到设计意图,就要想出有把握的办法,不要吊死在一棵树上。

[ 本帖最后由 TonyDeng 于 2011-9-2 09:54 编辑 ]

授人以渔,不授人以鱼。
2011-09-02 09:48
Luminal
Rank: 6Rank: 6
等 级:侠之大者
帖 子:140
专家分:470
注 册:2011-8-24
收藏
得分:5 
回复 13楼 TonyDeng
TonyDeng:
        你说的很对,规定是死的人是活的,谢谢你的提醒
2011-09-02 09:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
是的,规矩是死的,人是活的。牢牢把握自己的意图才是绝对宗旨,是语言和程序体现贯彻你的思想、意图,不是你受制于语言和程序!

事实上,我从来就没搞清楚*p++这样的语句到底是*(p++)还是(*p)++,所以我一般不写*p++这样的语句,要么就写后面的两种之一。这个观点,你以前也说过的。现在本主题的问题,也是如此。

授人以渔,不授人以鱼。
2011-09-02 10:04
woai_kmust
Rank: 2
等 级:论坛游民
帖 子:29
专家分:41
注 册:2011-8-31
收藏
得分:0 
回复 12楼 Luminal
thank you,有多一种理解了。编译器优化这说。
2011-09-02 12:10
xd1103121524
Rank: 2
等 级:论坛游民
帖 子:27
专家分:49
注 册:2011-8-29
收藏
得分:10 
不用分配,因为“000”相当于一个字符串,p[0]="000";相当于把“000”的首地址赋值给p[0],因此p[1],p[2],同理,他们的值与p[0]相同。。。。
2011-09-03 13:43
快速回复:一个关于指针数组的问题,弄不懂。
数据加载中...
 
   



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

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