char sp="pointer"; //字符指针
printf("%s,%c,%c\n",sp,sp,(sp+2)); //pointer,p,i
明明是同一个指针,为什么去掉之后就可以用%s输出全部,而加上*只能输出一个字符而且只能用%c
char*
而不是charchar* sp="pointer"
用这种方式定义字符串的时候,这是一个常量字符串,字符串的末尾会有一个隐藏的\0\0
停止如果对你有帮助,还请点个采纳,万分感谢!
写了程序运行结果如图:
为什么去掉之后就可以用%s输出全部,而加上*只能输出一个字符而且只能用%c?
首先来看 sp sp是字符指针(指针的话用于存储地址)
在C程序中,可以用两种方法访问一个字符串:
(1)用字符数组存放一个字符串,然后输出该字符串;
(2)用字符指针指向一个字符串。
此处显然是2,既然是指向一个字符串 此处就相当于一个字符数组 存储了一个字符串 因此去掉 * %s输出一个字符串。如果加上* ,* sp就相当于输出的是字符数组首地址即sp[0]的元素也就是p,然后一个字符自然是%c了。
以上仅供参考,如有任何疑问,可以评论回复,看到即回。
希望对题主有所帮助!可以的话,点个采纳!
这段代码应该是这样的
#include<stdio.h>
int main(){
char *sp = "pointer";
printf("%s,%c,%c",sp,*sp,*(sp+2));
}
sp是字符串指针,指向存有该字符串的地址,如下图
用%s是输出一个字符串,sp是地址,传入地址后遇到/0就输出一个完整的字符串
sp是sp指向的第一个字符,所以用%c输出
同理,(sp+2)指向的是第三个字符。