char* x 和 char x[] 的 sizeof 差异

4
我知道char*和char[]之间的一些区别。 char x[] = "xxxx" 是一个字符数组; char *y = "xxxx" 是指向字面(const)字符串的指针; 并且x[4] == '\0'*(y+4) == '\0'也是这样。 那么为什么sizeof(x)==5sizeof(y)==4呢?

2
将x定义为char x[] = "xxxxxxxx",然后问自己同样的问题...提示:以'\0'结尾。 - Mitch Wheat
1
@MitchWheat 我认为他明白x有五个字符。问题在于y是一个指针,所以sizeof(y) = 4(字节)。 - mgiuffrida
@eli:是的,我知道。但我不想直接回答。授人以渔嘛…… - Mitch Wheat
可能是C:指针和数组之间的区别或其他类似问题的重复。 - Jens Gustedt
阅读comp.lang.c FAQ的第6节。 - Keith Thompson
显示剩余2条评论
4个回答

10

char x[] = "xxxx" 是一个大小为5的数组,包含x x x x和\0。

char *y = "xxxx" 是指向字符串的指针。它的长度是4字节,因为这是指针的长度,而不是字符串的长度。


4

数组类型的大小是数组占用的空间大小,与 sizeof("xxxx") 相同。

指针类型的大小是指针本身占用的空间大小,与 sizeof(char*) 相同。


4

x实际上是"xxxx\0"。字符串末尾的空字符使数组有五个字节。

然而,sizeof(y)要求指针的大小,在您的情况下恰好为四个字节。指针y所指向的内容对于sizeof()函数没有影响。


0
对于char *x,x是一个指针,这意味着你可以通过x++x+=2等方式改变指向的位置。 char x[]是一个数组,它是一个常量指针,所以你不能执行x++。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接