在C中获取嵌套数组的大小

时间:2017-02-25 23:01:24

标签: c arrays matrix data-structures

char* alanina[] = {"alanina", "GCA","GCC","CGC","GCU"};
char* arginina[] = {"arginina", "AGA","AGG","CGA","CGC","CGG","CGU"};
char **aminoacids[] = {alanina,arginina};

printf("%i\n",(int)(sizeof(aminoacids[0]) / sizeof(**aminoacids[0]))); 

//控制台显示8,正确的答案是5。

1 个答案:

答案 0 :(得分:2)

将数组放入指针数组之后:

char **aminoacids[] = {alanina,arginina};

你把它们变成简单的指针。你得到sizeof(pointer)/sizeof(char) =>你的64位编译器上的8是因为你的sizeof部门使用双**作为分母而不是一个(这是第二个错误)

如果您执行sizeof(aminoacids[0]) / sizeof(*aminoacids[0]),结果会得到1,原因相同:aminoacids[0]已经衰减为指针。

获得5的唯一方法是sizeof(alanina)/sizeof(*alanina),因为数组没有衰减,编译器可以提供其存储大小。

计算元素数量的另一种方法是引入约定NULL终止数组。然后,您只需扫描数组NULL并获得相应的大小。

{"alanina", "GCA","GCC","CGC","GCU",NULL};