我在 C 中有一個類似于以下二維陣列的陣列:
uint16_t myArray[2][14] = {
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14},
{ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114}
};
我想獲得陣列的大小并使用:
printf("size: %d \n", sizeof(myArray) / sizeof( * myArray));
結果
size: 2
當我使用第一個子陣列的第一個元素時
printf("size: %d \n", sizeof(myArray) / sizeof(myArray[0][0]));
...我得到了正確的結果:
size: 28
這是因為我用 2 個子陣列初始化了我的陣列還是有其他解釋?
uj5u.com熱心網友回復:
當您使用以下方法獲取陣列的長度時:
printf("size: %d \n", sizeof(myArray) / sizeof( * myArray));
您正在獲取陣列的大小,然后將其除以第一個元素的大小,而第一個元素又是另一個陣列。因為其中有另一個陣列,其長度在變數宣告中描述,所以它將獲得陣列的大小而不是*uint16_t. 實際上,您得到的是整個陣列分配的記憶體量,然后將其除以內部陣列分配的記憶體量的大小,因為只有兩個元素,所以它是 2。
Whole 2D array (28 * sizeof(uint16_t)): 001, 002, 003, 004, 005, 006, 007, 008, 009, 010, 011, 012, 013, 014, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114
1D array inside 2D (14 * sizeof(uint16_t)): 001, 002, 003, 004, 005, 006, 007, 008, 009, 010, 011, 012, 013, 014
當使用內部元素的大小時,除以28 * sizeof(uint16_t),14 * sizeof(uint16_t)即 2。但是,當使用內部元素的大小時,除以28 * sizeof(uint16_t),sizeof(uint16_t)即 28。
希望這是有道理的:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450304.html
上一篇:在const參考中呼叫函式
下一篇:從陣列中洗掉所有數字
