我想将程序中的特定矩阵列传递给一个函数。如果我使用"
<function_name>(<matrix_name>[][<index>]);
"进行调用,则会出现以下错误:
请帮我找到适当的方法,谢谢。错误:在']'标记前预期表达式
<function_name>(<matrix_name>[][<index>]);
"进行调用,则会出现以下错误:
请帮我找到适当的方法,谢谢。错误:在']'标记前预期表达式
您使用的语法不存在。
矩阵按行(或更好地说,按第二维存储在内存中,您将其赋予行的语义),因此您无法原生地进行操作。 您可以将所有列元素复制到向量(单个维度数组)中并传递它。
如果您只需要按列(而不是按行)工作,则可以更改您赋予第一维和第二维的语义:将矩阵视为matrix[row][column]
而不是matrix[column][row]
。
否则,如果您经常需要这样做,请寻找更好的数据结构,而不是简单的数组。
functionName(matrixType** matrixRef, int colIndex, int numRows)
{
for(int i=0; i< numRows; ++i)
matrixType value = matrixRef[i][colIndex]; //Do something
}
你需要重新格式化数据。该列在内存中不是连续的。例如,如果你有一个数组:
arr[5][4]
在这里你需要记住几件事情与 C 相关。
我假设你的矩阵是以二维数组的形式存储的,就像这样:
float mat[4][4];
你需要记住的是,这只不过是连续存储在内存中的 16 个浮点数;你能够访问 mat [3] [2] 只是编译器提供的一种快捷方式。不幸的是,它实际上并没有将任何元数据传递给其他函数调用。实际上,访问 mat [3] [2] 实际上是一个快捷方式:
mat [(3*4 + 2)]
void do_processing(float* mat, int columns, int rows, int column_idx)
在这个函数内部,你将不得不自己计算特定的条目,使用公式:
mat [(column_idx * rows) + row_idx]