2017-02-25 35 views
1
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獲取一個嵌套的數組的大小用C

回答

2

一旦你把你的數組中的指針數組是這樣的:

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

你腐爛成簡單的指針。你在你的64位編譯得到sizeof(pointer)/sizeof(char) => 8,因爲您的sizeof師採用雙**作爲demominator,而不是一個(這是第二個錯誤)

如果你沒有sizeof(aminoacids[0])/sizeof(*aminoacids[0])你會得到1的結果,同樣的原因:aminoacids[0]已經腐爛成指針。

得到5的唯一方法是sizeof(alanina)/sizeof(*alanina),因爲數組沒有衰減,編譯器可以提供它的存儲大小。

另一種計算元素數量的方法是引入一個約定來終止你的數組。然後,您只需掃描陣列NULL並以此方式獲取大小。

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