矩阵作为函数参数的问题
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_matrice
return 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() 函数中将矩阵作为参数传递?