二維陣列傳參與動態宣告詳解 - w3c菜鳥教程

文章推薦指數: 80 %
投票人數:10人

二維陣列傳參與動態宣告詳解,二維陣列在棧上分配,各行地址空間連續定義的時候,擁有兩種形式第一種是指明行數和列數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>len; int*p=newint[len]; cout< for(inti=0;i>p[i]; cout< voiddynamiccreate2array() {intm,n; cout< cin>>m>>n; //動態開闢空間 int**p=newint*[m];//開闢行 for(inti=0;i>p[i][j]; cout< voidvectorcreate() {intm,n; cout< cin>>m>>n; //注意下面這一行:vector"之間要有空格!否則會被認為是過載">>"。

vector>p(m,vector(n)); cout< for(inti=0;i>p[i][j]; cout< 相關推薦 JAVA關於異常的相關問題 模電十555定時器 HTML5Canvas教程四路徑 二維陣列傳參與動態宣告詳解 CC型別轉換 相關推薦 JAVA關於異常的相關問題 模電十555定時器 HTML5Canvas教程四路徑 二維陣列傳參與動態宣告詳解 CC型別轉換 相關閱讀 JAVA關於異常的相關問題 模電十555定時器 HTML5Canvas教程四路徑 二維陣列傳參與動態宣告詳解 CC型別轉換 hadoopyarnJob提交和Shuffle topic 科技 教育 python 社會 linux 數碼 java 遊戲 c++ 演算法 C 健康 資料庫 mysql 文化 娛樂 汽車 科學 財經 資料結構 職場 php C語言 oracle c# sql 作業系統 工作 體育 R



請為這篇文章評分?