4

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

4

4 回答 4

10

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

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

于 2012-05-12T02:22:27.320 回答
4

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

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

于 2012-05-12T02:22:46.087 回答
4

x是真的"xxxx\0"。字符串末尾的 nul 终止符为数组提供了五个字节。

但是,sizeof(y)要求指针的大小,在您的情况下恰好是四个字节。y指向的内容sizeof()对.

于 2012-05-12T02:23:06.513 回答
0

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

于 2013-06-03T00:24:05.857 回答