C 将矩阵的一列传递给函数
我有一个关于将矩阵的一列传递给函数的问题。我只需要对整个矩阵的一列进行操作,但我似乎不知道如何操作。我在网上搜索答案,但似乎没有人有这个问题。谢谢你的建议 通过整个阵列不需要任何费用。然后,您只能对列数据进行操作。 如果每行的列大小不同,您可能需要查看:C 将矩阵的一列传递给函数,c,parameter-passing,C,Parameter Passing,我有一个关于将矩阵的一列传递给函数的问题。我只需要对整个矩阵的一列进行操作,但我似乎不知道如何操作。我在网上搜索答案,但似乎没有人有这个问题。谢谢你的建议 通过整个阵列不需要任何费用。然后,您只能对列数据进行操作。 如果每行的列大小不同,您可能需要查看: 如果您只需要偶尔处理一列中的数据,那么只需传递整个矩阵,并在需要时简单地处理单列数据。如果您经常需要处理一列数据,则必须使用实用函数来提取这一列数据,因为在C语言中,任何数组(包括数组数组)都只是一块内存。C不包含任何行和列的概念;你必须自己
如果您只需要偶尔处理一列中的数据,那么只需传递整个矩阵,并在需要时简单地处理单列数据。如果您经常需要处理一列数据,则必须使用实用函数来提取这一列数据,因为在C语言中,任何数组(包括数组数组)都只是一块内存。C不包含任何行和列的概念;你必须自己去做 与大多数类似的实用功能一样,有许多方法可以实现目标,而实际实现更多地取决于您需要如何使用结果,而不是获得结果的任何特定方法。一种方法是这样的:
#include <stdlib.h>
#include <stdio.h>
#define NUM_COLS 3
#define ERR_OUT_OF_RANGE 1
#define ERR_NOMEM -1
int get_matrix_column(int (*matrix)[NUM_COLS], int nRows, int iCol, int **result) {
if (iCol < 0 || iCol >= NUM_COLS) return ERR_OUT_OF_RANGE;
*result = malloc(sizeof(int) * nRows);
if (*result == NULL) return ERR_NOMEM;
for (int i = 0; i < nRows; i++) {
(*result)[i] = matrix[i][iCol];
}
return 0;
}
int main(void) {
int matrix[4][3] = { {2, 3, 4}, {7, 8, 9}, {0, 1, 2}, {5, 6, 7} };
int *col = NULL;
int rc = get_matrix_column(matrix, 4, 1, &col);
if (rc)
puts("Error getting column");
else
for (int i = 0; i < 4; ++i) {
printf("%d ", col[i]);
}
free(col);
return 0;
}
#包括
#包括
#定义NUM_COLS 3
#定义错误超出范围1
#定义错误名称-1
int get_matrix_列(int(*matrix)[NUM_COLS],int nRows,int iCol,int**result){
如果(iCol<0 | | iCol>=NUM_COLS)返回超出范围的错误;
*结果=malloc(sizeof(int)*nRows);
if(*result==NULL)返回ERR_nome;
对于(int i=0;i
此版本处理在自动存储(也称为堆栈上)中使用显式边界定义的矩阵。当传递给函数时,这种数组的指针衰减会导致与单个元素数组稍有不同的签名。之所以使用NUM\u COLS
宏常量,是因为此类声明中的最终维度必须是常量
同样,这只是众多方法中的一种。最突出的一点是,如果您只需要单个列的值,您必须自己去获取它们,因为C完全不知道您在说什么。列通常是非连续内存。有一个“跨步”的概念。