免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 16159 | 回复: 51
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-18 15:10 |只看该作者 |倒序浏览
这里先引用46楼magicd的原话
请任何一个还指望在学c上能有所进展的新手千万千万不要阅读本帖,完毕。

有这样一道选择题: 我换个问法
设有以下程序段:
main()
{
char s[]="china";
char *p=s;
printf("s=%ld, &s=%ld, p=%d, &p=%ld",s,&s,p,&p);

}


运行结果:

  1. s=1079971558, &s=1079971558, p=1079971558, &p=1079971552
复制代码



当我看到输出结果s=1079971558p=1079971558的时候
是否可以这样说:在程序运行时,因为
数组s的内容是"china\0" (不包括两边的引号)
s的内容是地址"1079971558"
p的内容是地址"1079971558"
所以s的内容和p的内容相等
为什么?


回复你的答案,然后看看35楼的回复。做人要诚实。

(目前已经确认阵亡三人,是谁谁自己看^_^)

[ 本帖最后由 pcbit 于 2007-12-19 17:03 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-12-18 15:13 |只看该作者
s的内容是字符c,而P的内容是s的地址值 。

论坛徽章:
0
3 [报告]
发表于 2007-12-18 15:14 |只看该作者
原帖由 foolishx 于 2007-12-18 15:13 发表
s的内容是字符c,而P的内容是s的地址值 。



难道S不是指针常量么?

s的内容应该是数组的首地址吧?
*s才是字符c,不对么?

[ 本帖最后由 pcbit 于 2007-12-18 15:33 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-12-18 15:24 |只看该作者
s作为函数参数传递时是指针常量

论坛徽章:
0
5 [报告]
发表于 2007-12-18 15:31 |只看该作者
原帖由 ruoyisiyu 于 2007-12-18 15:24 发表
s作为函数参数传递时是指针常量


s作为数组名就不是指针常量了么?

我能确定 *s =='c'
用*运算符不就说明s是个指针(常量或者变量)吗?
s本身的值是不能改变的,比如++s就是非法的操作,这不就说明s是个常量吗?

论坛徽章:
0
6 [报告]
发表于 2007-12-18 15:35 |只看该作者
s是个数组, 所以s的内容就是...

论坛徽章:
0
7 [报告]
发表于 2007-12-18 15:38 |只看该作者
回楼上的话,对于*s,它用的是直接寻址的方式来存取数据的,所以可以得到*s=='c'.在使用上,跟指针变量的间接寻址没有什么两样,但是它只是内存里"china"这个字符串的第一个字符的起始地址的一个标记,在对它的使用时,用的是直接寻址,比指针使用起来更快一些。

你可以研究一下编译原理。

论坛徽章:
0
8 [报告]
发表于 2007-12-18 15:38 |只看该作者
>>>>我能确定 *s =='c'
>>>>  用*运算符不就说明s是个指针(常量或者变量)吗?

那对于指针同样可以下标操作,难道我们就可以说指针就是数组,数组等同于指针么

论坛徽章:
0
9 [报告]
发表于 2007-12-18 15:41 |只看该作者
s是个数组.数组不是指针.就这么简单.

论坛徽章:
0
10 [报告]
发表于 2007-12-18 15:49 |只看该作者
太多人不求甚解了。看来离精通之道渐行渐远啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP