一维数组的传参
方法一:传数组名
编译器会把这里的
array 解析成指向整型元素的指针
,也就是数组的首地址,方括号里面的数组编译器会忽略,写不写都可以,最好不写,以免引起误解。
void test(int array[])
{}
方法二:传指针
array是指向数组的指针,数组名是首元素的地址。
但是在 sizeof(数组名) 和 &(数组名) 两组情况下,数组名指整个数组。
void test(int *array)
{}
二维数组的传参
方法一:形参为二维数组,并给定第二维长度
这是最简单的方法,形参与实参一样。
void test(int array[][3])
{}
方法二:形参为指向数组的一级指针,并给出第二维长度
void test(int *array[3])
{}
方法三:形参为指向指针的指针,二级指针
注意此处的实参必须为指针,而不是数组名
void test(int **array)
{}
传递实参方法
int main()
{
char *a[3]; //第二种写法 char *a[3]= {"abc", "def", "ghi"};
char args[][5]
a[0] = args[0]; //equals with a[0] = &args[0][0];
a[1] = args[1];
a[2] = args[2];
subfun(3, a); //若此处为subfun(3, args);则会编译出错
}
方法四:形参为一级指针+数组的行+数组的列
void test(double *p,const int m,const int n)
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
printf("%f, \n",p[i*m+j]);
}
int main(int argc, char *argv[])
{
double a[2][2]={{1,2},{3,4}};
test((double*)a,2,2);
return 0;
下面这篇博客是讲解
数组的运算 字符指针 sizeof与strlen的区别
本文参考
二维数组的传参问题
版权声明:本文为lvxin15353715790原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。