首先,二维数组形参的列大小必须指定;(否则编译会报错)
其次,列值大小,决定了调用函数时,实参对形参的赋值方式;(如果在函数调用时,列值大小不匹配,很可能因为错误的地址访问,造成内存崩溃)
void getFilterR(int16 R0[6], int16 Rn[][6], float *newR)
比如,Rn的定义如下
int16 Rn[5][6] = { {1,2,3,4,5,6},
{7,8,9,10,11,12},
{13,14,15,16,17,18},
{19,20,21,22,23,24},
{25,26,27,28,29,30} };
在函数调用前,Rn的内存分配如下
函数调用后,形参赋值结果如下
但是,如果在函数定义时将二维数组的列大小设置为3,如下
void getFilterR(int16 R0[6], int16 Rn[][3], float *newR)
函数调用后,形参赋值结果如下
如果函数中涉及到二维数组的指针操作,比如意图用Rn+1指向二维矩阵的第二行首元素时,如果形参列大小不一致,可能会导致内存崩溃。