一、二维动态数组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/n/269838.html
微信扫一扫
支付宝扫一扫