【发布时间】:2014-08-19 16:27:42
【问题描述】:
我是 C 的新手,我正在学习 Stephen G. Cochan 的“Programming in C”。我得到了下一个练习:
12.一个有i行j列的矩阵M可以转置成一个有j行的矩阵N 和 i 列,只需将所有 N a,b 的值设置为等于 M b,a 的值 a 和 b 的相关值。
a) 编写一个函数 transposeMatrix,将 4 x 5 矩阵作为参数 和一个 5 x 4 矩阵。让函数转置 4 x 5 矩阵并存储 结果在 5 x 4 矩阵中。还要编写一个主程序来测试这个功能。
我的论点做错了。
我得到的错误是: 警告:return 从没有强制转换的指针中生成整数 [默认启用]
传递“transposeMatrix”的参数 1 使指针从整数不进行强制转换[默认启用]
预期为“int (*)[5]”,但参数是“int”类型(在我看来,这可以忽略)
等等..所有关于论点.. 我知道代码并不完美,但我认为如果正确返回数组并且修复了参数,它应该可以工作..但我找不到修复它的方法..
// Program to transpose M matrix to N matrix
#include <stdio.h>
int transposeMatrix(int matrixM[][5], int matrixN[][4]) {
int i, j;
i = 0;
j = 0;
for (i = 0; i < 4; i++) {
for (j = 0; j < 5; j++) {
matrixN[j][i] = matrixM[i][j];
}
}
return matrixN;
}
int main(void) {
int i, j;
int matrixM[4][5] = {{12, 25, 47, 87, 54},
{16, 89, 78, 63, 58},
{45, 21, 47, 62, 82},
{14, 56, 47, 41, 98}};
int matrixN[5][4];
transposeMatrix(matrixM[4][5], matrixN[5][4]);
i = 0;
j = 0;
for (j = 0; j < 5; j++) {
for (i = 0; i < 4; i++) {
printf("%i ", matrixN[j][i]);
}
printf("\n");
}
return 0;
}
【问题讨论】:
-
您将函数声明为
int transposeMatrix。这意味着它必须返回一个整数。但是你试图返回一个数组。你不需要这样做,你正在更新调用者的数组。 -
当您将数组作为参数传递或作为值返回时,不会复制数组。在这些情况下,它们会自动转换为指针。
-
对未来问题的建议:尝试在您的代码之前介绍您的问题。如果他们不知道要查找什么,该代码对任何人都没有任何好处,因此您迫使潜在的回答者滚动到底部,然后返回阅读您的代码。此外,如果他们在打开您的问题时看到的第一件事是一大块没有上下文或介绍的代码,他们会立即点击离开。
-
在这里,我编辑了问题。那么我应该如何修复它以返回数组?指针在几章之后,所以我还不知道它们是什么..应该在不了解指针的情况下完成..