2020/6/10
C语言里函数参数只能用指针来表示一维数组,对于二维或多维数组可以通过Macro来实现,使代码简洁易懂。例如:
#define A(i, j) pA[ i*n + j ]
void testMat()
{
double pA = {1, 2, 3, 4, 5, 6};
//n: Number of columns
n = 2;
//Change cell(3, 2)
A( 2, 1) = 2;
}
但是我今天使用时出错,花了很长时间才找出原因。
int i = 1;
A( i+1, j ) = 2; //Wrong expression
调用Macro时,如果使用表达式赋值参数时,必须把表达式括起来。正确用法如下:
int i = 1;
A( i+1, j ) = 2;
如果不加括号,Macro会被解析为:
i + 1*n + j
而不是:
(i + 1)*n + j
网友评论