我正在尝试将指针值作为参数传递给二维数组,但它不起作用?这是一个例子:
void Pass(char *ch) // <--------- Where's I'm getting the error
{}
int main(...)
{
char ch[5][5];
Pass(ch);
}
我应该如何正确传递它,作为指向二维数组的参数?
答案 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
可能看似多余,但您需要将x
从0
限制为size_x-1
,y
从0
限制} size_y-1
。