龙空技术网

C|二维数组做函数参数的5种方式

小智雅汇 431

前言:

目前兄弟们对“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语言二维数组参数传递