矩阵作为函数参数的问题

Posted

技术标签:

【中文标题】矩阵作为函数参数的问题【英文标题】:Troubles with matrices as arguments in functions 【发布时间】:2015-11-08 11:09:13 【问题描述】:

我想将一个矩阵传递给一个函数,然后将相同的矩阵返回给另一个函数。 这是我的代码的一部分:

int** inizializzazione_matrice(int matrice1[][MAX_COLONNE])
int i = 0, k = 0;

while(i < MAX_RIGHE)
    k = 0;
    while(k < MAX_COLONNE)
        matrice1[i][k] = i;
        k++;
    
    i++;


return matrice1;

我这样称呼这个函数:

stampa_matrice(inizializzazione_matrice(matrice1));

stampa_matrice 是一个 void 函数,它接受 inizializzazione_matrice 的相同输入作为参数。

他们的声明是:

int** inizializzazione_matrice(int matrice1[][MAX_COLONNE]);
void stampa_matrice(int matrice1[][MAX_COLONNE]);

错误出现在inizializzazione_matricereturn matrice1;,错误代码为:int (*matrice1)[10] Error type value doesn't match the function type

我不明白为什么,因为inizializzazione_matrice 的调用已经以同样的方式完成并且它有效。我也尝试使用双指针作为参数,但它是相同的,而且我在 Eclipse 中有一个旧代码,它以同样的方式工作得很好(这是可怕的部分)。 我错过了什么吗?如果您需要更多信息,请告诉我!

【问题讨论】:

您不需要返回matrice1,更改就地进行,inizializzazione_matrice 可以是void;另外,MAX_COLONNE 应该与 matrice1 分开传递 另外,如果您没有在编译时启用警告,请这样做,在这种情况下,它们会提供额外的信息。至少使用-Wall -Wextra,这将进一步帮助识别声明/参数/等中的不匹配。 我很确定我禁用了 Visual Studio 上的警告,因为它们阻止了我一时兴起的 VS 编译。我会检查并重新启用它以防万一 【参考方案1】:

你可以用更简单的方式来做:

void inizializzazione_matrice(int **matrice1, max_righe, max_colonne)

  int i = 0, k = 0;

  while (i < max_righe) 
    k = 0;
    while (k < max_colonne) 
      matrice1[i][k] = i;
      k++;
    
    i++;
  

不需要返回matrice1,因为它是通过参数(不是通过值)传递的。

你可以用两个嵌套的for做得更好(代码说话):

void inizializzazione_matrice(int **matrice1, max_righe, max_colonne)

  for (int i = 0; i < max_righe)
    for (int k = 0; k < max_colonne)
      matrice1[i][k] = i;

【讨论】:

嗨,很抱歉回答迟了。我激活了电子邮件通知,但没有通过电子邮件到达。我已经可以轻松地做到这一点而无需退货,但使用它是我的目的。我发现以这种方式做起来更“有条理”且速度更快。还是我错了?无论如何,我没有使用 for,因为我在大学的教授不想在我们的代码中看到它,我避免使用它来防止养成习惯 关于这个参数的讨论很多,你不能将数组传值给函数,你使用指针;您可以分配一个新数组并返回其指针(这不会更改原始数组)。 while 构造没问题。 但是为什么我可以在调用 inizializzazione_matrice 时很好地传递参数?和指针的返回值不一样? 你不必返回指向matrice1的指针,因为inizializzazione_matrice的调用者作用域已经有了,它是方法的第一个参数。 我想为 stampa_matrice 函数返回它,我这样称呼它:“stampa_matrice(inizializzazione_matrice(matrice1));”还是单独调用更好?

以上是关于矩阵作为函数参数的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pthread_create() 函数中将矩阵作为参数传递?

PyQt4 将转换矩阵作为参数传递给构造函数

1. 编写一个M函数,用于计算两个矩阵的积(两个矩阵作为输入参数,不能使用矩阵乘运算符)。

如何在 Maxima 中将列表作为变量参数函数传递?

在 C 中将多维数组作为参数传递

参数传递的不同矩阵结构