|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 关于字符串指针问题 求大神不吝赐教!
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
489
人关注过本帖
标题:
关于字符串指针问题 求大神不吝赐教!
只看楼主
加入收藏
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
快速回复:
关于字符串指针问题 求大神不吝赐教!
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.049696 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved