请问一下,D中的p[2]为什么错了,而在编译器上运行printf("%s",&p[2]);就可以输出cde,p不是地址吗?BTW,答案是C
B是对的
D的错误在于,st1是常量,没办法写入,所以说strcat会报错。
问题的关键在于对指针和字符串的理解。
首先,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;
}