關於多維陣列動態開闢空間的一些疑問

2021-07-10 13:03:13 字數 1036 閱讀 4234

關於多維陣列動態開闢空間的一些疑問

核心思想:將多維陣列抽象成一維的陣列。

例如二維陣列可以當作一維陣列,陣列的每乙個元素都是乙個一維陣列,也就是說抽象後的一維陣列的每個元素都是乙個一維陣列的首位址,三維陣列也可以抽象成乙個一維陣列,陣列的每個元素也都是乙個二維陣列的首位址,四維陣列及多維陣列以此類推...

舉個

舉個例子:int arr[3][4][5]; 等價於 int **parr[3], 當然你可以理解為指標陣列,他的含義是parr是乙個一維陣列,總共3個元素,每乙個元素是乙個二級指標,也就是二維陣列的首位址。那麼,

下面先回顧一下一維陣列開闢空間:int a[2]; 那麼,int *pa = (int *)malloc(2 * sizeof(int));  詳細解釋一下:此事開闢的是2個整形元素的儲存空間。(int -> int *)

那麼對於以上抽象後的一維陣列,現在需要開闢的空間是3個 二維陣列的首位址所在的儲存空間,

(這裡簡單說一下:int a, a的首位址什麼型別呢? int* 沒問題吧, 那int a[2],此時a的首位址型別為int **; int a[2][3],此時a的首位址型別為int ***;

)所以如何開闢呢?

int ***parr = (int ***)malloc(3 * sizeof(int **)); 那麼此時抽象後的一維陣列的空間已經分配好了。

下面開始分配3個元素的記憶體空間,這三個元素為三個二維陣列,而我們剛剛分配了元素本身的空間,而元素本身的空間即就是他(指標本身的空間,注:指標有兩塊空間,一塊是指向的空間,

另外一塊是指標本身的空間

), 那麼現在開始給每個元素分配記憶體,

繼續以上過程:  

for(int i=0; i<3; ++i)

} 那麼此時空間就分配好了, 基本思路就是:由外而內,一次分配記憶體,這樣子更好理解...

多維陣列關於指標的一些認知

include void main printf d,a printf d,a printf d,a 0 printf d,a 0 printf d n a 0 0 以上均輸出第0行0列的位址 printf d,a 1 printf d,a 1 printf d,a 1 printf d,a 1 p...

關於陣列的一些演算法

去除陣列裡,重複的元素 方案1,用陣列本身的特性,去重 datetime dt datetime.now string s new string q s.distinct toarray 方案2,相鄰的進行比較,如果不等,則加入list string stringarray s listlistst...

關於c 動態陣列的一些粗淺見解

指標基礎 首先引入乙個 塊 int value 1024 int p p value 這樣應該非常直觀了,宣告乙個變數value並將其初始化為1024,宣告乙個int型指標p,將value對應的位址值賦給p。在這個 塊中,p value p value 直接宣告 int valueb 1024 in...