C数组初始化大小(字节)

C数组初始化大小(字节),c,multidimensional-array,bytearray,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

我期望以下数组初始化的大小为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?

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

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

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

Pixie给出了正确的答案,但请注意,
“AQ”
是一个三字节的文本将修复此问题。