字符串输入输出格式的问题

char sp="pointer"; //字符指针
printf("%s,%c,%c\n",sp,sp,(sp+2)); //pointer,p,i
明明是同一个指针,为什么去掉
之后就可以用%s输出全部,而加上*只能输出一个字符而且只能用%c

  • 首先,字符指针是char*而不是char
  • 当你char* sp="pointer"用这种方式定义字符串的时候,这是一个常量字符串,字符串的末尾会有一个隐藏的\0
  • %s的作用就是从指针所指向的位置开始一直打印,直到遇到\0停止
  • %c的作用是打印一个字符, 打印目前指针指向的字符,必须要解引用指针才能进行访问
    因为不解引用,你的指针就是一个地址,%c不能打印地址
    这就和%d不能用来打印一个int类型变量的地址一样

img

如果对你有帮助,还请点个采纳,万分感谢!

写了程序运行结果如图:

img

为什么去掉之后就可以用%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是字符串指针,指向存有该字符串的地址,如下图

img

用%s是输出一个字符串,sp是地址,传入地址后遇到/0就输出一个完整的字符串
sp是sp指向的第一个字符,所以用%c输出
同理,
(sp+2)指向的是第三个字符。