指向 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.
我打印了这个全局变量的大小,输出是 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.