2

我现在正在学习 c,我对 char 字符串数组元素的 size 元素有点困惑。

举个例子:

char *states[] = {
    "California", "Oregon",
    NULL, "Texas"
};

我想看看如何获​​得数组的大小,所以我可以在 for 循环中计算它。我从某个站点找到了这个计算来获取数组的大小:

int size = sizeof(states) / sizeof(states[0]);

我有点困惑,为什么是sizeof(states[0])8 个字节?

4

4 回答 4

3

你有一个指向字符的指针数组。数组的总大小为

<number of elements> * <number of bytes for a char pointer>

其中一个成员的大小是 char 指针的大小(系统上为 8 个字节)。所以这给了你:4*sizeof(char *)/sizeof(char *)因此数组中的元素数量。

要查看位置 0 处的字符串长度,您需要:

strlen(states[0]);

这将为您提供您期望的 10 个。

于 2012-11-30T12:37:40.437 回答
1

char *states[]是一个字符指针数组。所以 sizeof 数组的任何元素都会给出一个指针的大小,在你的情况下恰好是 8 个字节。

于 2012-11-30T12:40:45.440 回答
1

这是依赖于架构的行为。sizeof(states[0])是字符指针的大小,就像states[0]字符指针一样。在您的机器上,char指针的大小恰好是8. 因此输出。

如果你真的想要字符串的大小,那么最好使用类似strnlen()on 的东西states[0]

于 2012-11-30T12:42:13.150 回答
1
I'm a little confused, why is sizeof(states[0]) 8 bytes?

因为 states 是一个 char 指针数组。

所以,states[0]是数组的第一个元素,在你的机器上我认为地址是 8 个字节。

这就是为什么你得到8

于 2012-11-30T12:54:35.577 回答