C C 中int a 3 3 和int a 9 這兩種陣列所需要的記憶體是否完全一樣呢?

時間 2021-05-05 15:11:39

1樓:szouc

所需的記憶體是完全一樣的。

2. 開銷除變長陣列外,應該也是一樣的。多維變長陣列不可避免的使用乘法運算,開銷會較大。

3. 訪問陣列元素只需要知道兩個資料,乙個就是陣列的首元素位址,另乙個是整數偏移量。C 語言規定代表n維陣列的左值(一維就是陣列名)會隱式轉換成指向n-1維陣列的指標,且該指標指向n維陣列的首個元素,並不再是左值,除特殊情況(&, sizeof, ...

)。舉例:int a[5]; 陣列名 a 會轉換為指向 a[0] 的指標,也就是 &a[0],且型別是 int * 。

int b[5][5]; 陣列名 b 會轉換為指向 b[5] 的指標,也就是 &b[0], 且型別是 int(*)[5] ; 左值 b[0] 會轉換成指向 b[0][0] 的指標,是 &b[0][0], 且型別是 int *

2樓:CuKing

沒有額外開銷,不需要一維指標陣列來存,我一開始也是這麼以為的,後來發現原因了。

比如你定義了a[n][m],那a[i][j]就相當於(*a)[i*m+j],這個是在編譯的時候就處理好了,這也是為什麼傳二維陣列的引數必須把第二維大小填上的原因。

3樓:XXXXX

int arr[3][3];

printf("%d %d %d %d %d %d %d %d",((char*)&arr[0][1] - (char*)&arr[0][0char*)&arr[0][2] - (char*)&arr[0][1char*)&arr[1][0] - (char*)&arr[0][2char*)&arr[1][1] - (char*)&arr[1][0char*)&arr[1][2] - (char*)&arr[1][1char*)&arr[2][0] - (char*)&arr[1][2char*)&arr[2][1] - (char*)&arr[2][0char*)&arr[2][2] - (char*)&arr[2][1]));結果:

Python3 如何使用C C 混合程式設計?

python C 混編我一直關注,自己也有這樣的需求,相關的解決方案我試過好幾種,直接使用python C API是最麻煩最難用的一種,除此以外,至少還有4種方法,都更好用更簡單。1 跨語言的乙個通用解決方案是swig,有詳細的文件,是最容易想到的方法。我上一次用swig是十多年以前了,當時遇到的問...

在C C 中,什麼時候會用到sizeof?

可以看一下這篇文章 sizeof是乙個函式嗎?sizeof與strlen的區別?sizeof int p 的值是多少?int a 10 sizeof a 是多少?sizeof a 10 是多少?void f int a 10 cout 1 對於第乙個問題,sizeof 不是乙個函式,而是乙個語言內建...

C C中複製和賦值的區別是什麼?

小明 複製 copy 拷貝 賦值 assignment 建議多看看英文論述,雖然複製和賦值諧音,但這是兩碼事。拷貝是語義,賦值是語法。c 11之前,非自 賦值只有拷貝語義,c 11之後,賦值不一定是拷貝語義,還可能是移動語義 使用copy and swap優化那就處於拷貝移動疊加態,霧 Tony c...