免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: pcbit
打印 上一主题 下一主题

菜鸟关于C的一个问题?解决了 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2007-12-18 17:23 |只看该作者
原帖由 Wind-Son 于 2007-12-18 17:16 发表

那不就是s数组的首地址么,你用了有符号型就成负的了


我们没有讨论正负号,符号是我的设计的疏忽了,抱歉。

论坛徽章:
0
32 [报告]
发表于 2007-12-18 17:26 |只看该作者
s是数组, 它的内容毫无疑问是指整个数组
但是在需要的时候s会退化成&s[0]

s并非常量,
s++ <===> (&s[0])++ , 这自然不对

printf("s=%ld, &s=%ld, p=%d, &p=%ld",s,&s,p,&p); 此时s也退化成了&s[0]

至于你说数组s的内容为china, 这也是不对的, 应该是china\0

原帖由 pcbit 于 2007-12-18 17:11 发表

除了指针p之外,另一个内容是-1079971558的东西是谁??

论坛徽章:
0
33 [报告]
发表于 2007-12-18 17:32 |只看该作者
所以, 你根本就没有给出一个正确答案

原帖由 pcbit 于 2007-12-18 16:50 发表

  

不按格式答题,答案无效!!!



哈哈,谢谢!!!

论坛徽章:
0
34 [报告]
发表于 2007-12-18 17:42 |只看该作者
原帖由 pcbit 于 2007-12-18 15:10 发表
有这样一道选择题: 我换个问法
设有以下程序段:
char s[]="china";
char *p=s;

则s的内容和p的内容相等这句话正确么??为什么




谢谢



s是数组名,数组名代带数组首地址.
p是指针变量.

char *p=s;
p中存放的是s数据的地址.
*p就是取这个地址中存放的内容

论坛徽章:
0
35 [报告]
发表于 2007-12-18 17:58 |只看该作者
除了p之外,根本没有任何另外的地方存放了-1079971558(as you mentioned before).
p是个指针变量,它有自己的地址,它是个左值.
s在不当做地址用的时候,它是个字符数组.值是china\0
s在当作地址用的时候,事实上相当于&s[0].
在这时,它仅仅是个"地址"(右值),而不能算做一个"指针变量"(左值).
因此无论怎么说,s和p都不是一回事.

论坛徽章:
0
36 [报告]
发表于 2007-12-18 18:04 |只看该作者
原帖由 baohuaihuai 于 2007-12-18 17:58 发表
除了p之外,根本没有任何另外的地方存放了-1079971558(as you mentioned before).
p是个指针变量,它有自己的地址,它是个左值.
s在不当做地址用的时候,它是个字符数组.值是china\0
s在当作地址用的时候,事实上 ...



彻底明白!!
谢谢,也谢谢楼上的每一位朋友,谢谢!!!!!!!!

论坛徽章:
0
37 [报告]
发表于 2007-12-18 18:44 |只看该作者
应该是一样的吧。
P和S都是两个指针变量。S的地址空间里存放着一个字符串的首地址,当P=S后,P的地址空间里也存放着相同字符串的首地址,他们的地址空间的内容相同。而P和S都指向同一个字符串,那么他们的字符串当然相等了。

论坛徽章:
0
38 [报告]
发表于 2007-12-18 18:46 |只看该作者
哦,不好意思。回答的快,没看清楚。汗死。。。。。。

论坛徽章:
0
39 [报告]
发表于 2007-12-18 21:32 |只看该作者
事实上前面已经有几个网友从编译的原理上给你讲明白了,你的问题在于你自己的表述本身有误。
不妨看看《C专家编程》,那里面对于指针和数组讲的很清楚。要注重对于原理的理解而不是抠那几个字词的表面意思。

论坛徽章:
0
40 [报告]
发表于 2007-12-18 22:59 |只看该作者
原帖由 yingzheng 于 2007-12-18 21:32 发表
事实上前面已经有几个网友从编译的原理上给你讲明白了,你的问题在于你自己的表述本身有误。
不妨看看《C专家编程》,那里面对于指针和数组讲的很清楚。要注重对于原理的理解而不是抠那几个字词的表面意思。


是这样的,我的表述是从我的理解上来的,理解错了,表述就谈不上正确了
《C专家编程》这本书在我硬盘里好久了,这回要潜下心好好看看了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP