前言:
目前兄弟们对“c语言数组参数的函数”大体比较注意,看官们都需要剖析一些“c语言数组参数的函数”的相关知识。那么小编也在网摘上搜集了一些有关“c语言数组参数的函数””的相关内容,希望看官们能喜欢,看官们快快来学习一下吧!我们知道,数据在内存中是一维线性顺序存储的,如何表示二维数组呢?在编程语言中,二维数组如果按照行主序进行存储,则用行i、列j的行列式来表示每一个元素,如有数组arr[i][j](数组名arr即表示一块内存区域的首地址,其元素偏移可用i、j的表达式来表示),其每一个元素可用指针表示:arr+i*icols+j (i、j的初始值为0),解引用后就是a[i][j]。当然,可以当做一个降维的数组来处理,其元素为一个数组指针:arr[i]。
有5种方式可以在函数参数中调用一个二维数组:
#include <stdio.h>int arr[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};// 1 传二维数组,第二维必须标明// 函数调用:arr2D_1(arr,3);void arr2D_1(int arr[][4],const int irows){ for (int i=0;i<irows;++i) { for(int j=0;j<4;++j) { printf("%5d",arr[i][j]); } } printf("\n");}// 2 传数组指针,第二维必须标明// 函数调用:arr2D_2(arr,3);void arr2D_2(int (*parr)[4],const int irows){ for (int i=0;i<irows;++i) { for(int j=0;j<4;++j) { printf("%5d",parr[i][j]); } } printf("\n");}// 3 降维处理,传指针指向降一维的数组元素// 函数调用:arr2D_3(arr[0],3,4);或arr2D_3((int*)arr,3,4);void arr2D_3(int *arr,const int irows,const int icols){ for(int i=0;i<irows;++i) { for(int j=0;j<icols;++j) { printf("%5d",*(arr+i*icols+j)); } } printf("\n");}// 4 使用二维指针传值// 函数调用:arr2D_4((int**)arr,3,4);否则int[3][4]与int **类型不匹配void arr2D_4(int **arr, int rows, int cols){ for (int i=0;i<rows;++i) { for(int j=0;j<cols;++j) { printf("%5d",*((int*)arr + cols*i + j)); } } printf("\n");}// 5 使用指针数组// 函数调用,实参也使用指针数组,但指针数组的元素需循环预先赋值void arr2D_5(int* arr[], int rows, int cols){ for(int i=0;i<rows; i++) for(int j=0;j<cols; j++) printf("%5d",arr[i][j]);}int main(){ int* q,(*p)[4]; for(p=arr;p<arr+3;p+=1) for(q=p[0];q<p[0]+4;q+=1) printf("%5d",*q); printf("\n"); p=arr; for(int i=0;i<3;i++) for(int j=0;j<4;j++) printf("%5d",p[i][j]); printf("\n"); arr2D_1(arr,3); arr2D_2(arr,3); arr2D_3(arr[0],3,4); arr2D_3((int*)arr,3,4); arr2D_4((int**)arr,3,4); int* parr[3]; for(int k=0;k<3; k++) parr[k]=arr[k]; arr2D_5(parr,3,4); getchar(); return 0;}/*output: 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12*/
-End-
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #c语言数组参数的函数 #c语言函数如何调用数组 #c语言二维数组参数 #c对象数组作为函数参数 #c语言二维数组参数传递