#include
intmain
(void),
,,};
printf
("開始: ");
printf
("申請儲存行指標的空間: ");
arr =
(int**
)malloc(4
*sizeof
(int*)
);for(i =
0; i <
4; i++
)printf
("按照二維陣列方式訪問動態申請的arr: ");
for(i =
0; i <
4; i++)}
printf
("直接定義二維陣列arry的訪問方法: ");
for(i =
0; i <
4; i++
)printf
("按照二維陣列方式訪問動態申請的arr: ");
for(i =
0; i <
4; i++
)printf
("arr[i][j]等效訪問方式: ");
for(i =
0; i <
4; i++)}
printf
("此處顯示了arr,*arr和**arr的值: ");
for(i =
0; i <
4; i++
)printf
("直接定義arry[4][3]儲存在連續12個int型棧記憶體空間中: ");
p = arry;
for(i =
0; i <
12; i++
)printf
("動態申請的arr[4][3]儲存在堆上,不能直接通過指標連續訪問12個int型資料,");
printf
("因為malloc申請堆記憶體實際上是以鍊錶方式來管理的,存在額外的表頭空間: ");
p =*arr;
for(i =
0; i <
12; i++
)printf
("釋放二維資料的每一行資料的記憶體空間: ");
for(i =
0; i <
4; i++
)printf
("釋放行指標的記憶體空間: ");
free
(arr)
;printf
("結束! ");
return0;
}
開始:
申請儲存行指標的空間:
申請二維陣列第0行資料的空間(即arr[0]行的資料):
申請二維陣列第1行資料的空間(即arr[1]行的資料):
申請二維陣列第2行資料的空間(即arr[2]行的資料):
申請二維陣列第3行資料的空間(即arr[3]行的資料):
按照二維陣列方式訪問動態申請的arr:
直接定義二維陣列arry的訪問方法:
0x7ffd8ad5b820 = 1, 0x7ffd8ad5b824 = 2, 0x7ffd8ad5b828 = 3,
0x7ffd8ad5b82c = 4, 0x7ffd8ad5b830 = 5, 0x7ffd8ad5b834 = 6,
0x7ffd8ad5b838 = 7, 0x7ffd8ad5b83c = 8, 0x7ffd8ad5b840 = 9,
0x7ffd8ad5b844 = 10, 0x7ffd8ad5b848 = 11, 0x7ffd8ad5b84c = 12,
按照二維陣列方式訪問動態申請的arr:
0x2406050 = 1, 0x2406054 = 2, 0x2406058 = 3,
0x2406070 = 4, 0x2406074 = 5, 0x2406078 = 6,
0x2406090 = 7, 0x2406094 = 8, 0x2406098 = 9,
0x24060b0 = 10, 0x24060b4 = 11, 0x24060b8 = 12,
arr[i][j]等效訪問方式:
0x2406050 = 1, 0x2406054 = 2, 0x2406058 = 3,
0x2406070 = 4, 0x2406074 = 5, 0x2406078 = 6,
0x2406090 = 7, 0x2406094 = 8, 0x2406098 = 9,
0x24060b0 = 10, 0x24060b4 = 11, 0x24060b8 = 12,
此處顯示了arr,*arr和**arr的值:
0x2406020 = 0x2406050 -> 1,
0x2406028 = 0x2406070 -> 4,
0x2406030 = 0x2406090 -> 7,
0x2406038 = 0x24060b0 -> 10,
直接定義arry[4][3]儲存在連續12個int型棧記憶體空間中:
0x7ffd8ad5b820 = 1, 0x7ffd8ad5b824 = 2, 0x7ffd8ad5b828 = 3,
0x7ffd8ad5b82c = 4, 0x7ffd8ad5b830 = 5, 0x7ffd8ad5b834 = 6,
0x7ffd8ad5b838 = 7, 0x7ffd8ad5b83c = 8, 0x7ffd8ad5b840 = 9,
0x7ffd8ad5b844 = 10, 0x7ffd8ad5b848 = 11, 0x7ffd8ad5b84c = 12,
動態申請的arr[4][3]儲存在堆上,不能直接通過指標連續訪問12個int型資料,
因為malloc申請堆記憶體實際上是以鍊錶方式來管理的,存在額外的表頭空間:
0x2406050 = 1, 0x2406054 = 2, 0x2406058 = 3,
0x240605c = 0, 0x2406060 = 0, 0x2406064 = 0,
0x2406068 = 33, 0x240606c = 0, 0x2406070 = 4,
0x2406074 = 5, 0x2406078 = 6, 0x240607c = 0,
釋放二維資料的每一行資料的記憶體空間:
釋放行指標的記憶體空間:
結束!
C 動態申請二維陣列
剛學習,做下總結。以下是我的理解,如有錯誤歡迎指出。申請 int a 乙個指向指標的指標。int n m cin n m a new int n 申請乙個n個元素的一維陣列 作為行 for int i 0 i 關係如下假設 n 3 m 4 先申請乙個一維陣列,陣列的每個元素都是乙個指標變數 該陣列的...
c c 動態申請一維,二維陣列
指標變數名 new 型別名 下標表示式 下標表示式 不是常量表示式,即它的值不必在編譯時確定,可以在執行時確定。這就是堆的乙個非常顯著的特點,有的時候程式設計師本身都不知道要申請能夠多少記憶體的時候,堆就變的格外有用。1.動態申請一維陣列 int p new int n if p null retu...
C 中動態申請二維陣列
這裡主要介紹c 中動態申請二維陣列的兩種方式,直接給出 很容易明白,簡單的作為乙個筆記。include include 輸入輸出操縱 include using namespace std 法一 new 方式申請 void dynamicarray for i 0 i rows i cout end...