可能重复:
创建指向二维数组的指针
当我调用函数func4()和func5()时,我得到followinfg错误:
func4()错误:无法将参数’1’的’short int(*)[3]’转换为’short int **’为’int func4(short int **)’| func5()错误:无法将参数’1’的’short int(*)[3]’转换为’short int **’为’int func5(short int **)’|
如何更正调用函数func4()和func5()时的错误? 这是我的代码:
#include int func1(short mat[][3]); int func2(short (*mat)[3]); int func3(short *mat); int func4(short **mat); int func5(short *mat[3]); int main() { short mat[3][3],i,j; for(i = 0 ; i
如果不指定数组length or size of second dimension
的length or size of second dimension
can't
发送length or size of second dimension
数组。 这是导致错误的原因。
试试这个:
int func4(short mat[][3]) { short i, j, *index[3]; for (i = 0 ; i
}
Remember
,如果可以通过一种方式轻松,干净地完成某些操作,请不要尝试通过肮脏和困难的方式来完成,因为在将来修改或更新代码时会让您感到困惑。
他们是一样的:
int func(short **mat); int func(short *mat[]); int func(short *mat[3]);
而short **
与short (*)[3]
不兼容,因为它们指向的类型不同。 short **
指向short *
而short (*)[3]
指向short[3]
。
你也可以试试这个:
int funcMy(void *mat) // OK! -added by Justme0 2012/12/31 { short i, j, *index[3]; for (i = 0 ; i
我认为第三个function是最好的! 它使用了一个名为“展平数组”的技巧,我在C中的POINTERS中读到了这个技巧。
方法#3(使用单个指针,数组被“展平”)================================== ==========================使用此方法,您可以创建通用例程。 维度不会出现在任何声明中,因此您可以将它们添加到forms参数列表中。
手动数组索引可能会减慢执行速度。
问题在于func4()
和func5()
的矩阵定义不正确。
你将它定义为short mat[3][3]
,但在这种情况下,你实际上并没有为矩阵线分配一个指针数组。 你得到一个连续内存块的指针。
如果希望将参数矩阵作为short int**
,则应将其定义如下:
#include short int** mat; for(int i = 0; i
以上就是c/c++开发分享2个暗淡的数组和双指针相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(XD中文网)。
本文链接:https://xdcnz.com/10139.html