C语言字符串与指针问题

img

请问一下,D中的p[2]为什么错了,而在编译器上运行printf("%s",&p[2]);就可以输出cde,p不是地址吗?BTW,答案是C

B是对的
D的错误在于,st1是常量,没办法写入,所以说strcat会报错。

以下内容部分参考ChatGPT模型:


问题的关键在于对指针和字符串的理解。

首先,p是一个指针,指向字符数组"abcde"的首地址,即p=&a[0]。因此,p[0]指向字符'a',p[1]指向字符'b',以此类推。

其次,字符串在C语言中是以字符数组的形式存在的,即以字符数组的形式存储在内存中,以'\0'结尾。

所以,&p[2]实际上是字符数组"abcde"中第三个字符'c'的地址,即&p[2]=&a[2]。

而printf("%s",&p[2])中的%s表示输出一个字符串,即从指定地址开始输出直到遇到'\0'为止的一串字符。因此,它可以输出从&a[2]开始的字符串"cde"。

以下是完整的代码示例:

#include <stdio.h>

int main()
{
    char a[]="abcde";
    char *p=a;  // p指向字符数组a的首地址
    
    printf("%c\n",p[2]);  // 输出字符'c'
    printf("%s\n",&p[2]);  // 输出字符串"cde"
    
    return 0;
}

如果我的建议对您有帮助、请点击采纳、祝您生活愉快