为什么字符串数组中的"Hello"大小为4?

Moh*_*hil 1 c string pointers sizeof

有问题的代码:

#include <stdio.h>

int main(void) {

 char *a[10] = {"hi", "Hello", "how"};
 printf("%d\n", sizeof(a));

 printf("%s\n%s\n%s\n", a[0],a[1],a[2]);
 printf("%d\n%d\n%d\n", sizeof(a[0]),sizeof(a[1]),sizeof(a[2]));

 printf("%d", sizeof("Hello"));
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

40
hi
Hello
how
4
4
4
6
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会发生这种情况,我也查找了sizeof关于cppreference的参考资料.仍然不知道为什么它为"Hello"返回4时应该需要6来存储它.

Raz*_*zib 8

它实际上打印指针的大小而不是字符串内容本身.看看所有大小打印为4个字节.