Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将矩阵的一列传递给函数_C_Parameter Passing - Fatal编程技术网

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完全不知道您在说什么。

列通常是非连续内存。有一个“跨步”的概念。