转载---C语言二维数组作为函数参数的使用

方法一, 形参给出第二维的长度。
#include <stdio.h>
void func(int n, char str[][5] )
{
int i;
for(i = 0; i < n; i++)
printf("\nstr[%d] = %s\n", i, str[i]);
}

int main()
{
char str[][5] = {“abc”,“def”,“ghi”};//一维数组个数是否指定没关系,够用就行
func(3, str);
return 0;
}

用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如:

<span style="color:#000000"><code class="language-c"><span style="color:#c678dd">void</span> <span style="color:#61aeee">Func</span><span style="color:#999999">(</span><span style="color:#c678dd">int</span> array<span style="color:#999999">[</span><span style="color:#98c379">3</span><span style="color:#999999">]</span><span style="color:#999999">[</span><span style="color:#98c379">10</span><span style="color:#999999">]</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#c678dd">void</span> <span style="color:#61aeee">Func</span><span style="color:#999999">(</span><span style="color:#c678dd">int</span> array<span style="color:#999999">[</span><span style="color:#999999">]</span><span style="color:#999999">[</span><span style="color:#98c379">10</span><span style="color:#999999">]</span><span style="color:#999999">)</span><span style="color:#999999">;</span> 
</code></span>
  • 1
  • 2

二者都是合法而且等价,但是不能把第二维或者更高维的大小省略。


方法二,形参声明为指向数组的指针。
例如:
#include <stdio.h>
void func(int n, char (*str)[5] )
{
int i;
for(i = 0; i < n; i++)
printf("\nstr[%d] = %s\n", i, str[i]);
}

int main()
{
char str[][5] = {“abc”,“def”,“ghi”};//一维数组个数是否指定没关系,够用就行
func(3, str);
return 0;
}

注意:
在void func(int n,char (str)[5])中*array需要用括号括起来。*
这种形式的声明参数是一个指针,它指向具有5个元素的一维数组。因为[]的优先级比 * 的优先级高,故*array必须用括号括起来,否则变成了
void func(int n,char *str[5]);
这时候参数相当于是声明了一个数组,该数组有5个元素。


方法三,形参声明为指针的指针。
例如:
#include <stdio.h>
void func(int n, char **str )
{
int i;
for(i = 0; i < n; i++)
printf("\nstr[%d] = %s\n", i, str[i]);
}

void main()
{
char* p[3];
char str[][5] = {“abc”,“def”,“ghi”};
func(3, str);
}

在函数中使用传参过来的二维数组(指针)进行数组取值的时候不能使用(array[i][j])这种形式来取值。

参考资料:
https://blog.csdn.net/kangxidagege/article/details/79475537
http://www.cnblogs.com/yangxi/archive/2012/03/22/2411452.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值