扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
二维数组定义的一般形式是:
创新互联服务项目包括桃山网站建设、桃山网站制作、桃山网页制作以及桃山网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,桃山网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到桃山省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
类型说明符 数组名[常量表达式1][常量表达式2]
其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度
int a[3][4];
在子函数申请二维数组,主函数使用,可以用动态申请。
方法不止一种,我这里用指针的指针实现二维数组。
二维数组除了行列,本身地址也是连续的,从第一行第一列的元素地址++,可以取出所有元素。所以我这里先申请了完整的连续地址。
#includestdio.h
#includemalloc.h
int ** sr(void)
{
int i,j;
int *memory=(int *)malloc(sizeof(int)*9);//申请完整的连续内存地址3*3
int **arr=(int **)malloc(sizeof(int*)*3);//申请二维数组行指针数组(也就是二维数组)
if(!memory || !arr){
printf("内存申请错误!\n");return NULL;}
for(i=0,j=0;i9;i+=3)//将连续地址按列数,取出每行首地址,赋值给二维数组元素
arr[j++]=memory[i];
for(i=0;i3;i++)
for(j=0;j3;j++)
scanf("%d",arr[i][j]);
return arr;
}
int main(void)
{
int i,j,**arr=sr();
if(!arr)
return 1;
printf("---主函数调用子函数定义的二维数组---\n");
for(i=0;i3;i++,printf("\n"))
for(j=0;j3;j++)
printf("%d ",arr[i][j]);
printf("\n---实现二维数组地址连续性---\n");
int *p=arr[0][0];
while(p=arr[2][2])
printf("%d ",*p++);
return 0;
}
1、使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小。
2、例程,分配3行4列二维数组:
#include stdio.h
#include malloc.h
int main()
{
int **a;
int i, j;
a = (int**)malloc(sizeof(int*)*3);//为二维数组分配3行
for (i = 0; i 3; ++i){//为每列分配4个大小空间
a[i] = (int*)malloc(sizeof(int)*4);
}
//初始化
for (i = 0; i 3; ++i){
for (j = 0; j 4; ++j){
a[i][j] = i+j;
}
}
//输出测试
for (i = 0; i 3; ++i){
for (j = 0; j 4; ++j){
printf ("%d ", a[i][j]);
}
printf ("\n");
}
//释放动态开辟的空间
for (i = 0; i 3; ++i){
free(a[i]);
}
free(a);
return 0;
}
/*
输出:
0 1 2 3
1 2 3 4
2 3 4 5
*/
用指针new出来 二维数组定义必须规定列 int a[][6]这样吧 所以用指针动态开
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流