二維陣列傳參與動態宣告詳解 - w3c菜鳥教程
文章推薦指數: 80 %
二維陣列傳參與動態宣告詳解,二維陣列在棧上分配,各行地址空間連續定義的時候,擁有兩種形式第一種是指明行數和列數int array 3 3 第二種是不指明第 ...
二維陣列傳參與動態宣告詳解
2021-08-2902:53:18字數2453閱讀6315
二維陣列在棧上分配,各行地址空間連續
定義的時候,擁有兩種形式
第一種是指明行數和列數
intarray[3][3]=,,};第二種是不指明第一維,而指明第二維
intarray[3]=,,};而在子函式宣告的時候,有三種方式一種是指明形參的行數和列數
intfunc(intarray[3],intm,intn)
intmain(),,};
...
func(array,3,3);
...
}第2種雖然函式引數的限定降低了,但仍需要在棧上預先分配一定大小的二維陣列,程式整體並不是完全的泛用。
為了進一步提高泛用性,把二維陣列空間的分配也動態化,使用malloc()在堆上分配空間:
int**array;
array=(int**)malloc(m*sizeof(int*));
for(i=0;i這時,在分配空間的作用域裡,對0值得注意的是,雖然malloc()每次分配的空間在地址上是連續的,但是多次malloc()分配的空間之間並不一定是連續的,這與在棧上分配的二維矩陣有著根本的不同,對於二維陣列array[3][3],不能再用array[1][4]來訪問array[2][1]了,前者地址越界。
而且如果malloc申請的空間太多了堆上可能就容納不下了到頭來還是得考慮用棧實現分配。
用堆上分配的一維陣列表示二維陣列,函式引數使用指標形式
用一維陣列來實現二維陣列,是一種折中方案,但是很好理解,也不易出錯。
這樣分配的陣列空間是連續的。
使用時需要把兩維下標轉化為一維下標。
#include#include#includeintfunc(int*array,intm,intn)
}//functiontoinitializethetwo-dimensionalarray
voidinit_2d(int*a,intx,inty)
printf("\n");
}}intmain()
另外,這種分配方式仍然是在棧上,相關討論可見於
固定矩陣的大小,可以省略二維矩陣的第一維
#include#include#includeintfunc(int*array,intm,intn)動態開闢二維陣列
#include//包含輸入輸出函式
#include//包含動態記憶體分配函式。
intmain()
//釋放記憶體
for(i=0;i
vector>p(m,vector(n));
cout<
for(inti=0;i
延伸文章資訊
- 1二維陣列傳參與動態宣告詳解 - 程式人生
二維陣列在棧上分配,各行地址空間連續. 定義的時候,擁有兩種形式. 第一種是指明行數和列數 int array[3][3] = {{1,2,3},{4,5,6},{7,8,9}};.
- 2二維陣列傳參與動態宣告詳解 - w3c菜鳥教程
二維陣列傳參與動態宣告詳解,二維陣列在棧上分配,各行地址空間連續定義的時候,擁有兩種形式第一種是指明行數和列數int array 3 3 第二種是不指明第 ...
- 3Double pointer · parallel_processing
... 指標與二維陣列; 函數參數必須指定column的長度; 動態配置二維陣列 ... 陣列的指標(pointer to array) 以及二維陣列(two dimensional array...
- 409_二維指標與陣列- 動態配置[m][n] 陣列@ 藍影
ptr2 = (int**)malloc(sizeof(int*)*ROW);. 沒錯!這就是二維動態陣列配置的第一步,它的實際意思就是:配置了ROW個整數指標 ...
- 5C++ -傳遞二維陣列 - 小哈的程式工作坊
C++ -傳遞二維陣列(Pass 2D array as a function parameter in C++) ... void Test02() { int row = 2; int co...