C数组初始化大小,以字节为单

时间:2011-04-03 19:38:03

标签: c multidimensional-array bytearray

我预计以下数组初始化的大小为32. 1字节字符,列表中每个项目为2个字节,16个项目.... = 32.但是它是128个字节。为什么呢?

char* cmds[] = {"AQ", "BD", "LS", "TW", "AS", "CP", "TR", "CO", "BF", "MS", "SR", "TL", "WT", "PM", "TE", "TC"};
printf("%li\n", sizeof(cmds));
//result is 128
//size of list is 16
//8 bytes per item in the list
//why?

3 个答案:

答案 0 :(得分:8)

那是因为你有一个指向char的指针数组。每个指针都是8字节(在x64上),所以16个指针x 8个字节= 128个字节。

答案 1 :(得分:2)

你有一个指针数组到字符串,你正在编译的体系结构有一个8字节的指针大小。 8个字节乘以16个指针等于128个字节。

答案 2 :(得分:1)

此外,如果数组不是指针而是普通字符之一,因为你没有一个字符,但每个元素有多个,那么每个元素将包含三个字符,包括最后的NULL。所以你会有16 * 3 = 48个字节。