搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 关于字符串指针问题 求大神不吝赐教!
标题:
关于字符串指针问题 求大神不吝赐教!
只看楼主
zla1215
等 级:
新手上路
帖 子:3
专家分:4
注 册:2015-4-26
楼主
问题点数:0 回复次数:4
关于字符串指针问题 求大神不吝赐教!
声明指针
main()
{char *pa;pa=“my world”;//问题1:为什么pa可以这么声明,“my world”地址是哪里来的?
printf (“%s”,pa); /*问题2:为什么输出pa不用他的解引用*pa形式?pa变变量不是存储“my world”的首地址么?为什么printf语句能输出my world。
exit 0;
}
搜索更多相关主题的帖子:
字符串
world
2015-04-28 03:28
wmf2014
等 级:
贵宾
威 望:
216
帖 子:2039
专家分:11273
注 册:2014-12-6
第
2
楼
得分:0
原本这些规则已经固化了,就像1+1=2,从没想过是怎么来的,让你一问就有点迷糊了,看来我基本功不扎实。
你的第一个问题:我认为字符串地址是编译器编译时安排的。就我理解,c字符串赋值有3种方式,一种是给char数组,这时字符串地址会是该数组的首地址(数组的首地址也是编译时安排的);二是给char型指针,这时编译器会默认字符串为一常量,会在常量区自动开辟一个空间存储字符串,并将该字符串首地址给指针,无法通过该指针修改这个值;三是无主字符串,你可以直接("abcd";),结果你会发现编译器直接跳过了这句,因为这是无意义的,不需分配空间。
你的第二个问题:其实你可以printf (“%s”,*pa); 编译可以通过,只是显示的结果未知,printf是否把参数值当作地址用还是直接显示值取决于第一个参数的格式,%s就会把它对应位置的值作为首地址使用,显示该地址指向的字符,直到碰到'\0'停止显示。
我是这样认为的,不知道是否正确。
能编个毛线衣吗?
2015-04-28 07:14
embed_xuel
等 级:
贵宾
威 望:
58
帖 子:3845
专家分:11385
注 册:2011-9-13
第
3
楼
得分:0
回复 2楼 wmf2014
推荐《编译器与加载器》看看
总有那身价贱的人给作业贴回复完整的代码
2015-04-28 08:00
embed_xuel
等 级:
贵宾
威 望:
58
帖 子:3845
专家分:11385
注 册:2011-9-13
第
4
楼
得分:0
回复 2楼 wmf2014
printf (“%s”,pa)
printf也是函数,“%s”和pa是它的入参,所以,“%s”也是常量字符串,也存储在常量区,在这句调用中,第一个入参实际上是“%s”的地址。
所以所有用“”括起来的字符串都是常量字符串,都存储在常量区。
总有那身价贱的人给作业贴回复完整的代码
2015-04-28 08:05
zla1215
等 级:
新手上路
帖 子:3
专家分:4
注 册:2015-4-26
第
5
楼
得分:0
回复 2楼 wmf2014
感谢版主的细心回答!
你那贪吃蛇帖子我看了,我只能说太屌了,我什么时候能达到你的高度啊^_^
看c也看了个把月了,刚才那个指针问题我想了好几天也没想通。看来还是要把全书学完内容都结合起来才能一窥c的面貌了,^_^
2015-04-28 13:44
5
1/1页
1
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-444588-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 1.358819 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved