指针,这个A错哪里了

chat a[]="It is mine";
a+1表示的是字符t所在存储单元的地址

img

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