二維陣列在棧上分配,各行位址空間連續
定義的時候,擁有兩種形式
第一種是指明行數和列數
int array[3][3] = ,,};
第二種是不指明第一維,而指明第二維
int array[3] = ,,};
而在子函式宣告的時候,有三種方式一種是指明形參的行數和列數
int func(int array[3], int m, int n)
int main() ,,};
...
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 #include int func(int *array, int m, int n)
}// function to initialize the two-dimensional array
void init_2d(int *a, int x, int y)
printf("\n");
}}int main()
固定矩陣的大小,可以省略二維矩陣的第一維
#include #include #include int func(int *array, int m, int n)
動態開闢二維陣列
#include //包含輸入輸出函式
#include //包含動態記憶體分配函式。
int main()
//釋放記憶體
for(i = 0; i < m; i ++)
free(p[i]);
free(p);
return 0;
}
記住要使用free
動態開闢一維陣列
void dynamiccreate1array()
{ int len;
cout<
cin>>len;
int *p = new int[len];
cout<
for(int i = 0; i < len; i++)
cin>>p[i];
cout<
void dynamiccreate2array()
{ int m,n;
cout<
cin>>m>>n;
//動態開闢空間
int **p = new int*[m]; //開闢行
for(int i = 0; i < m; i++)
p[i] = new int[n]; //開闢列
cout<
for(i = 0 ; i < m ; i++)
for(int j = 0; j < n; j++)
cin>>p[i][j];
cout<
void vectorcreate()
{ int m,n;
cout<
cin>>m>>n;
//注意下面這一行:vector "之間要有空格!否則會被認為是過載 "> > "。
vector> p(m,vector(n));
cout<
for(int i = 0 ; i < m ; i++)
for(int j = 0; j < n; j++)
cin>>p[i][j];
cout<
動態二維陣列的傳參與刪除
昨晚有道程式設計題,題目不難,但是寫 卡在了很多小問題上,才發現對於c 的基礎知識很多其實是不清楚的 1 首先,對於面向行的輸入 int a,b cin a cin b 這就是面向行的輸入,如果一行輸入兩個數值,空格間隔 cin a b 對於字串 陣列型 char str 100 gets str ...
二維陣列的動態宣告
看書的時候看到二維陣列動態宣告這個方式,例程如下 int a new int m for int i 0 i m i a i new int n 對指標的指標呼叫不是很理解,於是在網上查了一下,發現下面這種講解比較通俗易懂 下面三種定義形式怎麼理解?怎麼動態分配空間?1 int ptr 2 int ...
詳解go 動態陣列 二維動態陣列
go使用動態陣列還有點麻煩,比python麻煩一點,需要先定義。動態陣列申明 var dynaarr string 動態陣列新增成員 dynaarr append dynaarr,one go 結構體陣列 go package main import fmt type a struct func m...