C语言常量指针在 putchar 和printf 中的实现?

如下语句"abcdef"为一个常量指针,在putchar(*"abcdef");打印出的是a;在printf("%s\n",*"abcdef")执行报错为什么。。为什么p... 如下语句"abcdef"为一个常量指针, 在putchar(*"abcdef"); 打印出的是a; 在printf("%s\n",*"abcdef")执行报错为什么。。
为什么printf的”abcdef“不是常量指针,
展开
 我来答
的文然0c
2013-12-09 · TA获得超过404个赞
知道小有建树答主
回答量:116
采纳率:0%
帮助的人:101万
展开全部
"abcdef" 指向的是一个字符串首地址 *运算 取里面的值 就是a
*"abcdef" 的类型是 字符型 用%s 输出错误 应该是类型不匹配
用%c 输出应该不会错 手边没有编译器 无法验证
如果你想输输出b的值 那么只需要putchar(*("abcdef"+1)); 取c 依次类推。
printf第二个参数 是要一个变量地址 也就是变量名 printf("%s\n","abcdef") ;这样是对的
加上*运算符 他就是一个常量了 值是a。
"abcdef"+2就是地址向后移2个 指向了c 当然输出cdef 但是如果你又加上*
*("abcdef“+2) 还是错的 类型不匹配 他不是地址了
橙心橙愿
2013-12-09 · TA获得超过1033个赞
知道小有建树答主
回答量:460
采纳率:100%
帮助的人:226万
展开全部
*“abcdef”是指字符串首地址的解引用也就是字符a,所以putchar(*"abcdef")相当于putchar('a')
而printf("%s\n",*"abcdef")就相当于printf("%s\n",'a');用%s格式输出字符类型的数据会出段错误
更多追问追答
追问
printf里面的"abdef"和putchar里不一样,  putchar把"abcdef"当成常量指针,    printf只当成字符串常量,把*去掉就输出abcdef,  printf 里如果是"abcdef"+2输出也只是向右移动两位,输出为cdef.

我的问题是 为什么printf的”abcdef“不是常量指针。
追答
常量指针的意思是指针指向的内容不可修改,但是指针本身可以修改
putchar和printf里的"abcdef"都是常量指针,*"abcdef"都是取首地址上的值,不同的是putchar和printf的输出类型不一样
难道你以为printf输出错误是因为没把他当作常量指针?你所说的printf只把他当成字符串常量,不就是字符串的首地址吗,printf从这个地址开始去打印字符,直到某个位置上的值为\0
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式