我试图将指针值作为参数传递给二维数组,但它不起作用?这是一个例子:
void Pass(char *ch) // <--------- Where's I'm getting the error
{}
int main(...)
{
char ch[5][5];
Pass(ch);
}
我应该如何正确传递它,作为指向二维数组的参数?
我试图将指针值作为参数传递给二维数组,但它不起作用?这是一个例子:
void Pass(char *ch) // <--------- Where's I'm getting the error
{}
int main(...)
{
char ch[5][5];
Pass(ch);
}
我应该如何正确传递它,作为指向二维数组的参数?
数组到指针衰减规则不是递归的。在 main() 内部,ch 是 char (*)[5] 类型,即指向 5 个字符数组的指针。Pass() 需要一个指向 char 的指针,因此会出现错误。
因此,Pass() 应声明为接收字符 (*ch)[5]。
在 C 中,指向二维数组的指针与指向一维数组的指针基本相同,当作为指针传递时,二维数组的原始大小会丢失(char*
在您的情况下)。
您可以使用明确的大小定义来定义您的 Pass 函数:
void Pass(char ch[5][5]) {...}
或将大小作为附加参数传递:
void Pass(char* ch, int size_x, int size_y) {...}
第二种选择更具动态性,但需要更加谨慎。要访问 (x,y) 处的数组,请使用以下公式:
ch[size_y * x + y]
虽然传递size_x
似乎是多余的,但您将需要它来限制您的x
from 0
tosize_x-1
和y
from 0
to size_y-1
。