0

我试图将指针值作为参数传递给二维数组,但它不起作用?这是一个例子:

void Pass(char *ch) // <--------- Where's I'm getting the error
{}

int main(...)
{
    char ch[5][5];
    Pass(ch);
}

我应该如何正确传递它,作为指向二维数组的参数?

4

2 回答 2

1

数组到指针衰减规则不是递归的。在 main() 内部,ch 是 char (*)[5] 类型,即指向 5 个字符数组的指针。Pass() 需要一个指向 char 的指针,因此会出现错误。

因此,Pass() 应声明为接收字符 (*ch)[5]。

于 2013-09-29T20:35:08.583 回答
1

在 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似乎是多余的,但您将需要它来限制您的xfrom 0tosize_x-1yfrom 0to size_y-1

于 2013-09-29T20:36:20.643 回答