将矩阵中的列传递给c中的函数

将矩阵中的列传递给c中的函数,c,C,我想把程序中矩阵的一列传递给一个函数。 如果我使用调用([])作为调用 然后我得到了错误 错误:应在“]”之前使用表达式 代币 所以请帮我找到合适的方法 谢谢您使用的语法不存在 矩阵是按行存储在内存中的(或者更好地说,是按第二个维度存储的,您可以为其提供行的语义),因此不能以本机方式存储。您可以将所有列元素复制到向量(一维数组)中并传递它 如果您只需要按列(而不是按行)工作,您可以更改第一维度和第二维度的语义:将矩阵视为matrix[row][column],而不是matrix[column][

我想把程序中矩阵的一列传递给一个函数。 如果我使用调用
([])作为调用
然后我得到了错误

错误:应在“]”之前使用表达式 代币

所以请帮我找到合适的方法
谢谢

您使用的语法不存在

矩阵是按行存储在内存中的(或者更好地说,是按第二个维度存储的,您可以为其提供行的语义),因此不能以本机方式存储。您可以将所有列元素复制到向量(一维数组)中并传递它

如果您只需要按列(而不是按行)工作,您可以更改第一维度和第二维度的语义:将矩阵视为
matrix[row][column]
,而不是
matrix[column][row]


否则,如果您需要经常这样做,请寻找更好的数据结构,而不是简单的数组。

您必须重新格式化数据。该列在内存中不连续。例如,如果您有一个数组:

arr[5][4]

然后尝试传递一个“列”就像尝试传递数组中的每5个元素一样。把它想象成一个巨大的数组。

关于C,这里有几件事需要记住

我假设矩阵存储为2D数组,如下所示:

float mat[4][4]

您需要记住的是,这只是连续存储在内存中的16个浮点;事实上,您可以访问mat[3][2],这只是编译器给您的一个快捷方式。不幸的是,它实际上并没有将任何元数据传递给其他函数调用。访问mat[3][2]实际上是实现以下目的的快捷方式:

mat[(3*4+2)]

将其传递到函数中时,需要指定要传递的矩阵的边界,然后指定列号:

void do\u处理(float*mat、int列、int行、int列\u idx)

在该函数中,您必须使用以下公式自己计算特定条目:


mat[(column\u idx*rows)+row\u idx]

由于寻址的工作方式,您不能简单地传递“column”,因为“column”值实际上存储在“rows”中。这就是为什么编译器不允许您在“行”引用中不传递任何值,即:“[]”

一个简单的解决方案是传递整个矩阵,并将列索引作为单独的整数和行数传递。然后,您的函数可以遍历每一行以访问该列的所有成员。 即:

functionName(matrixType**matrixRef,int-colIndex,int-numRows)
{  
对于(int i=0;i
尝试此替代结构
functionName(matrixType** matrixRef, int colIndex, int numRows)  
{  
   for(int i=0; i< numRows; ++i)  
      matrixType value = matrixRef[i][colIndex]; //Do something  
}