一、二維動態數組c
二維動態數組是 C 語言中數組中非常重要的一種類型,也是應用非常廣泛的一種數據結構。在 C 語言中,動態分配二維數組需要注意兩點:一是使用malloc, 或calloc函數動態分配內存;二是動態分配內存後,再使用兩重循環為每個元素賦值。以下是一個動態分配二維數組的示例代碼:
#include
#include
int main()
{
int row = 3, col = 4, i, j;
int **p = (int **)malloc(row * sizeof(int *));
for (i = 0; i < row; i++)
p[i] = (int *)malloc(col * sizeof(int));
for(i=0;i<row;i++)
for(j=0;j<col;j++)
p[i][j] = i+j;
for(i=0;i<row;i++){
for(j=0;j<col;j++)
printf("%d ",p[i][j]);
printf("\n");
}
return 0;
}
二、二維動態數組定義
定義二維數組,它首先是一個數組,該數組又存儲了一系列數組,每個數組又存儲了若干變量。其定義方式可以是: int a[2][3];,這裡就定義了一個2行3列的二維數組a。同樣的,我們使用指針也可以定義二維動態數組, int **a;。
三、二維動態數組和矩陣速度
在 C 語言中,使用二維數組可以十分方便地處理矩陣,對於一些矩陣計算可以使用指針運算來加速處理速度。下面是一個二維數組與矩陣運算效率進行比較的代碼:
#include
#include
#include
int main()
{
int row = 10000, col = 10000, i, j, sum = 0;
int **p = (int **)malloc(row * sizeof(int *));
clock_t start,end;
for (i = 0; i < row; i++)
p[i] = (int *)malloc(col * sizeof(int));
for(i=0;i<row;i++)
for(j=0;j<col;j++)
p[i][j] = 1;
start = clock();
for(i=0;i<row;i++)
for(j=0;j<col;j++)
sum += p[i][j];
printf("二維數組求和:%d, 耗時:%ld 毫秒\n", sum, clock()-start);
int *q = (int *)malloc(row * col * sizeof(int));
for(i=0;i<row*col;i++)
q[i] = 1;
sum = 0;
start = clock();
for(i=0;i<row;i++)
for(j=0;j<col;j++)
sum += *(q+i*col+j);
printf("矩陣求和:%d, 耗時:%ld 毫秒\n", sum, clock()-start);
free(p); free(q);
return 0;
}
四、二維動態數組怎麼做
二維數組的申明可以寫成:
int a[M][N];
其中,M、N表示數組a的行數和列數。定義了一個M行N列的二維數組。
二維數組的訪問方法如下:
int value = a[i][j];
五、二維動態數組賦值
1、直接賦值:int a[2][3]={{1,3,5},{2,4,6}};
2、循環賦值:
int i,j;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
a[i][j]=2*i+j;
六、二維動態數組聲明
聲明一個二維數組變量時,必須指定二維數組的行數和列數,這兩個數可以使用常量、變量、數值型常數表達式等表示。
七、二維動態數組初始化
對數組初始化的幾種常見方式:
1、直接賦值:
int a[2][3]={{1,3,5},{2,4,6}};
2、置0:
int a[2][3]={0};
3、循環初始化:
int i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
a[i][j]=2*i+j;
八、二維動態數組vector
vector可以實現動態二維數組,其中第一維使用resize,第二維使用vector進行動態分配。具體用法如下:
#include
#include
using namespace std;
int main()
{
int dim1 = 2, dim2 = 3;
vector<vector> a(dim1);
for (int i = 0; i < dim1; ++i)
a[i] = vector(dim2);
for (int i = 0; i < dim1; ++i)
for (int j = 0; j < dim2; ++j)
a[i][j] = i+j;
for (int i = 0; i < dim1; ++i) {
for (int j = 0; j < dim2; ++j) {
cout << a[i][j] << "\t";
}
cout << endl;
}
return 0;
}
九、二維動態數組定義stl
使用stl庫定義動態二維數組非常方便,只需要使用vector來定義即可。
#include
#include
using namespace std;
int main()
{
int dim1 = 2, dim2 = 3;
vector<vector> a(dim1, vector(dim2, 0));
for (int i = 0; i < dim1; ++i)
for (int j = 0; j < dim2; ++j)
a[i][j] = i+j;
for (int i = 0; i < dim1; ++i) {
for (int j = 0; j < dim2; ++j) {
cout << a[i][j] << "\t";
}
cout << endl;
}
return 0;
}
十、二維動態數組c語言
在 C 語言中,動態分配二維數組需要注意兩點:一是使用malloc, 或calloc函數動態分配內存;二是動態分配內存後,再使用兩重循環為每個元素賦值。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/269838.html
微信掃一掃
支付寶掃一掃