二维数组使用指针变量做函数参数是什么意思? 在什么情况下,函数参数才使用带指针的二维数组?

提交
2024年11月22日 08:32
有2个网友回答
网友(1):

如果将二维数组作为参数传递给函数,那么在函数的参数声明中必须指明数组的列数,行数可以指定也可以不指定。因为函数调用时传递的是一个指针,它指向由行向量够成的一维数组。

所以如果定义一个函数,参数二维数组,那么至少要指定列数,比如:

void p (int a[2][3])//正确
void p (int a[][3])//正确
void p (int a[][])//错误
void p (int a[2][])//错误

那么如果你想要用指针来做参数传递二维数组,那你需要定义一个指向数组(大小等于二维数组列数)的指针,比如:

void p (int (*a)[3])//正确

注意:要加括号,如果写int *a[3],就只是一维指针数组。

我写了个简单案例:

#include 
void p(char (*num)[4])
{

    printf("%s\n",num[0]);
    printf("%s\n",num[1]);
}
void p2(char num[][4])
{

    printf("%s\n",num[0]);
    printf("%s\n",num[1]);
}
int main()
{
    char num[2][4]={"abc","efg"};
    p(num);
    p2(num);
    return 0;
}

网友(2):

你有一个二维数组a[8][8],你想对这64组数进行处理,均-1.
用函数怎么实现?
实参a[0][0],a[0][1],a[0][2].......88个实参?形参也是88个?只改了形参,实参没影响?
这时,只需要把二维数组的首地址指针当作参数,函数中形参指针一项项移动是不是很好?