C中的二维数组

时间:2013-09-29 20:28:28

标签: c codeblocks

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

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

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

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

2 个答案:

答案 0 :(得分:1)

数组到指针的确定规则不是递归的。在main()内部,ch的类型为char(*)[5],即指向5个字符数组的指针。 Pass()期望指向char的指针,因此错误。

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

答案 1 :(得分:1)

在C中,指向二维数组的指针与指向一维数组的指针基本相同,并且当作为指针传递时,二维数组的原始大小会丢失(char*在你的情况下)。 / p>

您可以使用明确的大小定义来定义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可能看似多余,但您需要将x0限制为size_x-1y0限制} size_y-1