關於多維陣列動態開闢空間的一些疑問
核心思想:將多維陣列抽象成一維的陣列。
例如二維陣列可以當作一維陣列,陣列的每乙個元素都是乙個一維陣列,也就是說抽象後的一維陣列的每個元素都是乙個一維陣列的首位址,三維陣列也可以抽象成乙個一維陣列,陣列的每個元素也都是乙個二維陣列的首位址,四維陣列及多維陣列以此類推...
舉個
舉個例子: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...