C语言二维数组作为函数参数传递

C语言二维数组作为函数参数传递二维数组存放方式二维数组在内存中是按行存放的 先存储第一行 在接着存储第二行 二维数组作为函数参数二维数组作为函数的参数 实参可以直接使用二维数组名 在被调用函数中可以定义形参所有维数的大小 也可以省略以为大小的说明 例如 voidfind chara 3 10 voidfind chara 10 也可以使用数组指针来作为函数参数 例如

二维数组存放方式

二维数组在内存中是按行存放的,先存储第一行,在接着存储第二行…..

二维数组作为函数参数

二维数组作为函数的参数,实参可以直接使用二维数组名,在被调用函数中可以定义形参所有维数的大小,也可以省略以为大小的说明。例如:

void find(char a[3][10]); void find (char a[ ][10]);

也可以使用数组指针来作为函数参数,例如:

void find (char (*p)[10]);

但是不能像下面这样使用,例如:

void find(char a[ ][ ]); void find (char a[3][ ]);

因为从实参传递来的是数组的起始地址,如果在形参中不说明列数,编译器将无法定位元素的的位置。

各个维数不固定的二维数组

如果不确定二维数组的维数的话,我们不能使用上面的方法,可以用下面的方法:

  • 手工转变寻址方式

对于数组 int p[m][n];

如果要取p[i][j]的值(i>=0 && m<=0 && j>=0 && n<=0),编译器是这样寻址的,它的地址为:

p + i*n + j;

void find(char a[3][10]); void find (char a[ ][10]);

转换为

void find (int a,int m,int n);

在转变后的函数中,array[i][j]这样的式子是不对的,因为编译器不能正确的为它寻址,所以我们需要模仿编译器的行为把array[i][j]这样的式子手工转变为: (( int )a+ n*i + j);

因为上次做了一道c语言的题,题目要求输入8个字符串,必须将字符串按字典序从小到大排列,排列的必须用函数实现,一下是我的代码:

#include 
    #include 
    void range(char str[ ][100]);//传进二维数组 int main(void) { char str[8][100]; int i; for(i=0;i<8;i++) gets(str[i]); range(str); for(i=0;i<8;i++) printf("%s\n",str[i]); } void range(char str[ ][100]) { int i,j; char temp[100]; for(i=0;i<8-1;i++) { for(j=0;j<8-i-1;j++) { if(strcmp(str[j],str[j+1])>0) { strcpy(temp,str[j]); strcpy(str[j],str[j+1]); strcpy(str[j+1],temp); } } } }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212757.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午7:20
下一篇 2026年3月18日 下午7:20


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号