C语言常量指针在 putchar 和printf 中的实现?
如下语句"abcdef"为一个常量指针,在putchar(*"abcdef");打印出的是a;在printf("%s\n",*"abcdef")执行报错为什么。。为什么p...
如下语句"abcdef"为一个常量指针, 在putchar(*"abcdef"); 打印出的是a; 在printf("%s\n",*"abcdef")执行报错为什么。。
为什么printf的”abcdef“不是常量指针, 展开
为什么printf的”abcdef“不是常量指针, 展开
展开全部
"abcdef" 指向的是一个字符串首地址 *运算 取里面的值 就是a
*"abcdef" 的类型是 字符型 用%s 输出错误 应该是类型不匹配
用%c 输出应该不会错 手边没有编译器 无法验证
如果你想输输出b的值 那么只需要putchar(*("abcdef"+1)); 取c 依次类推。
printf第二个参数 是要一个变量地址 也就是变量名 printf("%s\n","abcdef") ;这样是对的
加上*运算符 他就是一个常量了 值是a。
"abcdef"+2就是地址向后移2个 指向了c 当然输出cdef 但是如果你又加上*
*("abcdef“+2) 还是错的 类型不匹配 他不是地址了
*"abcdef" 的类型是 字符型 用%s 输出错误 应该是类型不匹配
用%c 输出应该不会错 手边没有编译器 无法验证
如果你想输输出b的值 那么只需要putchar(*("abcdef"+1)); 取c 依次类推。
printf第二个参数 是要一个变量地址 也就是变量名 printf("%s\n","abcdef") ;这样是对的
加上*运算符 他就是一个常量了 值是a。
"abcdef"+2就是地址向后移2个 指向了c 当然输出cdef 但是如果你又加上*
*("abcdef“+2) 还是错的 类型不匹配 他不是地址了
展开全部
*“abcdef”是指字符串首地址的解引用也就是字符a,所以putchar(*"abcdef")相当于putchar('a')
而printf("%s\n",*"abcdef")就相当于printf("%s\n",'a');用%s格式输出字符类型的数据会出段错误
而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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询