一个c语言指针的问题

问题一:如图所示,为什么*p输出的是a而不是amiss,为什么p输出的是amiss而不是一个地址呢??问题二:char*不是一个字符指针吗,可以为他赋值的不应该是一个地址... 问题一:如图所示,为什么*p 输出的是a 而不是 a miss ,为什么 p 输出的是 a miss 而不是一个地址呢??
问题二:char * 不是一个字符指针吗,可以为他赋值的不应该是一个地址吗,为什么可以把a miss这个字符串赋给字符指针??

相比而言,

问题三:为什么当变成整形指针了以后,*p就会按照我的思路变成10,p就是个地址,这和上个图有什么区别??
展开
 我来答
穷丑矮基泄男
2014-09-09
知道答主
回答量:3
采纳率:0%
帮助的人:2.7万
展开全部
第一个程序里面,字符型指针p指向字符串“a miss”。在内存地址来看,就是p这个指针,指向了字符串“a miss”的第一个字符。*p代表的是指针p所指向的字符a,所以cout输出了a。

C++中,你使用的标准库<isotream>中的I/O类对"<<"操作符进行了重载,因此在遇到字符型指针时会将其当作字符串名来处理,输出指针所指的字符串,所以输出完整的字符串a miss。
当然,对于整形变量int来说,cout能够输出你想要得到的地址。
文正153
2014-09-09 · TA获得超过2.1万个赞
知道大有可为答主
回答量:2221
采纳率:63%
帮助的人:603万
展开全部
首先说一下,你这不是C语言,是C++
问题一:这个就是问题二的内容了.p指向的是a,而p是一个地址.C语言输出一个字符串不是靠一个实际的数据输出的,而是靠着实际数据的首地址输出的.
问题二:char *ch = "aadsf";你要知道,一个字符串的值是这个临时值的首地址,也就是a的地址.而你又把这个地址给保存了,所以"aadsf"也被保存了.也就是说,当电脑执行过char*ch="aadsf"后,内存中会多出9个字节的内存空间.其中4个字节保存着"aadsf"的首地址,另5个字节保存着"aadsf"
问题三:p指向一个变量,在p前面加一个*,就等价于这个变量.
追问
既然p保存的是地址,为什么输出时 a miss
追答
cout是可以自己判断数据类型的,你写个p,cout知道是字符指针,就认为这是一个字符串的首地址,cout就会自动把p当字符串处理,与printf("%s", p);等价的.
还有,你问的这问题到底是C还是C++?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tdfzq
2014-09-09 · TA获得超过839个赞
知道小有建树答主
回答量:771
采纳率:75%
帮助的人:190万
展开全部
1、指针可以在初始化时赋初值,char *p = "a miss"; //这个初始化过程,是将指针cp指向字符串的首地址,而并不是传递字符串的值。因为,在C语言里面,没有整体处理一个字符串的机制
所以*p 输出的是a
2、字符串常量传递的是它的首地址,不可以通过*p修改该字符串的值,因为该字符串为常量,而它只是简单的将指针指向该字符串常量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式