我们知道,对于一维数组,其数组名可以理解为一个特殊指针,具有常量的性质,使用sizeof可以求得数组的长度,而当作为函数参数时,就退化为一个指针,此时sizeof不再能求得数组的长度了。
一维数组名可以直接赋给一个一级指针,如:
intarr[5];int*p=a;
二维数组呢,可以理解为数组的数组,但二维数组名通常不能直接赋值给一个二级指针,通常通过数组指针或指针数组或降维来处理:
defineCOL3inttest(){inta[ROW][COL];int(*ap)[COL]=a;int*pa[ROW];for(inti=0;iROW;i++)pa[i]=a[i];int*p=(int*)a;int*p2=a[0][0];int**pp=(int**)a;//没什么意义}
以下是应用实例:
#(){intn1,n2;int**arr,i,j;printf("请输入所要创建的动态数组的第一维长度:");scanf("%d",n1);printf("请输入所要创建的动态数组的第二维长度:");scanf("%d",n2);if((arr=(int**)malloc(n1*sizeof(int*)))==NULL)//第一维的创建{printf("分配内存空间失败!\n");return0;}for(i=0;in1;i++){if((arr[i]=(int*)malloc(n2*sizeof(int)))==NULL)//第二维的创建{printf("分配内存空间失败!\n");return0;}}for(i=0;in1;i++){for(j=0;jn2;j++){arr[i][j]=i*n2+j+1;printf("%d\t",arr[i][j]);}printf("\n");}for(i=0;in1;i++){free(arr[i]);//释放第二维}free(arr);//释放第一维while(1);return0;}
如果想使用一个二维数组做函数参数,也可以以上面同样的思路进行处理,细节请见:
C|二维数组做函数参数的5种方式
--
版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。