指向 char 的指针数组的大小

Size of array of pointers to char

我打印了这个全局变量的大小,输出是 20。我试图理解它为什么不只是 15,因为有 5 个元素,每个元素的大小都是 3(包括末尾的 \0每一个)。

#include <stdio.h>

char* arrChar[5] = { "hh","jj","kk","zz","xx" };

int main()
{
printf("size = %d\n", sizeof(arrChar));
}

我不知道是否有联系,但如果我们在这里合并所有数字,它将是 20,但我仍然不明白元素的数量 (5) 是如何添加到元素的大小中的数组 (15) 是有意义的。

你说得对,内存中某处占用了 15 个字节。但这些信息通常没有用。

对于 char str[] = "1";sizeof(str)sizeof(char*) 相同,它始终是指针的大小(在您的 32 位设置中为 4 个字节)

对于 char str[] = "1234567"; sizeof(str) 还是一样的(使用 strlen 作为字符串的长度)

如果你有 5 个 str,那么它的大小是 4 x 5。

您可以使用sizeof(arrChar)/sizeof(*arrChar)获取数组中元素的总数。

在您的示例中,实际数据是存储在内存的某个只读部分中的字符串文字。数据不在 arrChar 内部分配,只是数据的地址。

无论您将每个指针设置为指向什么,sizeof(arrChar) 将始终产生 sizeof(char*) * 5。如果指针是 4 个字节大,则 4*5=20.