chat a[]="It is mine";
a+1表示的是字符t所在存储单元的地址
a可以表示地址,这样写的a+1不能。
正确的应该是*a[1],因为一个字符不止占一个字节,C语言默认好像是两个字节,举个例子,如果数组a的起始地址是0x0004,那么t的地址就应该是0x0006,但是如果是a+1,他的意思就是a的地址再加一,就是0x0005了,所以就是错的
A没错,是D错了,a最多可以存11个字符
A没错的,看下面程序结果,有问题可以直接编写程序运行一下就可以了。
A的测试
#include <stdio.h>
int main() {
char a[] = "It is mine";
printf("a:%p, a+1:%p\n", a, a+1);
printf("*a:%c, *(a+1):%c\n", *a, *(a+1));
return 0;
}
结果如下:
a:0x7ffd8b6b4f30, a+1:0x7ffd8b6b4f31
*a:I, *(a+1):t
D的测试, a可以存不止10个字符,可以越界,又是程序会蹦,有时不一定会的。
#include <stdio.h>
int main() {
char a[] = "It is mine";
a[10] = ' ';
a[11] = 'z';
a[12] = '\0';
printf("a:%s\n", a);
return 0;
}
运行结果如下:
a:It is mine z