0

我正在尝试定义一个macro2D array语法转换为1D vector. 即,对于一个12x12数组,matrix[i,j]应该评估为matrix[12*i + j]. 到目前为止我已经尝试过

#define matrix[i,j] matrix[12*i+j]

#define (matrix[i,j]) matrix[12*i+j]

#define matrix[(i,j)] matrix[12*i+j]

#define matrix([i,j]) matrix[12*i+j]`

我使用matrix[i,j]语法的原因是因为它将是从 R 代码调用的扩展,并且我希望该项目的其他作者能够准确地理解正在做什么。有没有办法用宏来做到这一点?

4

3 回答 3

1

您可以做的唯一方法是使用( )而不是使用[]

#define matrix(i,j) matrix[12*i+j]

在代码中,您以这种方式定义矩阵

int matrix[12*12];
matrix(i,j) = 5;
于 2013-02-08T15:16:22.803 回答
1

最好只为计算定义一个宏,而不是取消引用。

#define X_DIM 12
#define Y_DIM 12
#define D21(x,y) (X_DIM*(x)+(y))

int my_matrix1[X_DIM*Y_DIM];
double my_matrix2[X_DIM*Y_DIM];

my_matrix1[D21(4, 3)];
my_matrix2[D21(2, 1)];

因此,您不仅限于宏中定义的唯一矩阵。

更根本的是,你为什么还要这么做?正常的多维数组语法已经可以做到这一点。

于 2013-02-08T16:06:55.573 回答
1

像这样的东西可能会起作用:

#define TO_1D(m,x,y) (m[x*12+y])

int matrix[100];
TO_1D(matrix, 0, 4) = 13;

但我想知道为什么你不喜欢更安全的东西,比如:

int data[100];
inline int& matrix(int x, int y)
{
   return data[x*12+y];
}
于 2013-02-08T15:21:01.577 回答