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。
答案 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};