我期望下面数组初始化的大小为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("%lin", 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字节