关于在C语言 声明带有一个变长数组参数的函数
发布网友
发布时间:2023-05-26 09:35
我来回答
共5个回答
热心网友
时间:2024-10-08 03:23
在C语言中,函数中要用数组做参数,可以采用三种方式,其中后两种均可适用于变长数组参数。
1 直接以定长数组做参数,声明形式为:
ret_type func(int a[100]);
这里就是以100个元素的数组做参数的。
2 声明时不带长度,即:
ret_type func(int a[]);
3 以指针替代数组,即:
ret_type func(int *a);
2,3两种均可以用于变长数组。不过这种情况下,需要与函数约定数组长度的确定方法,比如约定规模 ,约定结束值,增加额外参数传长度,在数组元素中包含长度,或采用全局变量传长度等等。
热心网友
时间:2024-10-08 03:24
#include <stdio.h>
int sum2d(int rows, int cols, int ar[][3]) //数组作为形参,传递的是地址,即数组名,
//对于二维数组,通常列数必须是常数,行数为空
//但一般数组地址的传递使用指针
{
int r;
int c;
int tot = 0;
for(r=0; r<rows; r++)
for(c=0; c<cols; c++)
tot += ar[r][c];
return tot;
}
void main()
{
int x;
int a[2][3]={1,2,3,4,5,6};
x=sum2d(2,3,a);
printf("%d\n",x);
}
热心网友
时间:2024-10-08 03:24
int ar[rows][cols]: 二维数组作参数时,你这里的rows和cols一定要是常数!
expected constant expression ====> understand?
热心网友
时间:2024-10-08 03:25
二维数组做函数参数时,形参的语法形式是:类型说明符 形参名[ ][常量表达式M]
形参数组可以省略一维的长度。
由于实参代表了数组名,是"地址传递",二维数组在内存中是按行存储的。在形参中,就必须指明列的个数,才能保证实参数组与形参数组中的数据一一对应,所以,形参数组中第二维的长度是不能省略的。
调用函数时,与形参数组相对应的实参数组必须也是一个二维数组,而且它的第二维的长度与形参数组的第二维的长度必须相等。
函数sum2d(int rows, int cols, int ar[rows][cols]) 的第三个参数数组ar的第二维必须给一个常数。
热心网友
时间:2024-10-08 03:25
确认两个问题:
1.你建的工程是不是对的?
2.你的和这个调用函数,是在哪调用的,调用的时候,传入的参数是什么?
这些错误主要是一些参数不对,或者定义的数组不完全所致的!