【发布时间】:2017-04-18 06:32:41
【问题描述】:
我是编码新手,目前正在学校学习 C。我有一个关于如何使用函数在 C 中添加矩阵的问题。我面临一些困难,并希望在这里得到一些建议。我的老师给课堂的条件是 1)两个 5 x 6 矩阵,整数条目从 1 到 100,2)定义和使用你自己的函数。这是我目前写的代码:
#include <stdio.h>
#include <stdlib.h>
#define ROW 5
#define COLUMN 6
size_t addMatrices(int a[][COLUMN], int b[][COLUMN]);
void printArray(int a[][COLUMN]);
int main(void) {
int row, column;
int matrix1[ROW][COLUMN] = { {0}, {0} };
int matrix2[ROW][COLUMN] = { {0}, {0} };
for (row = 0; row < ROW; row++) {
for (column = 0; column < COLUMN; column++) {
matrix1[row][column] = 1 + (rand() % 100);
matrix2[row][column] = 1 + (rand() % 100);
}
}
printf("matrix1:\n");
printArray(matrix1);
printf("\n\nmatrix2:\n");
printArray(matrix2);
printf("\n\nresult:\n");
addMatrices(matrix1, matrix2);
printfArray(result);
printf("\n");
return 0;
}
void printArray(int a[][COLUMN]) {
int row, column;
for (row = 0; row < ROW; row++) {
for (column = 0; column < COLUMN; column++) {
printf("%d ", a[row][column]);
}
printf("\n");
}
}
size_t addMatrices(int a[][COLUMN], int b[][COLUMN]) {
int result[ROW][COLUMN] = { {0}, {0} };
int row, column;
for (row = 0; row < ROW; row++) {
for (column = 0; column < COLUMN; column++) {
result[row][column] = a[row][column] + b[row][column];
}
}
return result;
}
如果您查看 main 方法的主体,编译器会说存在错误,因为变量“result”在传递给函数 printArray() 时没有定义。我理解为什么会发生这个错误的概念(关于局部变量和传递参数),但是我该如何解决这个问题呢?
除此之外,非常感谢您提出任何其他意见或建议。
谢谢!
【问题讨论】:
-
int result[ROW][COLUMN] = { {0}, {0} };移至main。并致电void addMatrices(int a[][COLUMN], int b[][COLUMN], int result[][COLUMN]) { -
您不能从函数返回本地声明的矩阵
int result[ROW][COLUMN] = { {0}, {0} };。它是在 函数堆栈 上创建的,该堆栈在函数 return 上被销毁。 (1) 动态分配result或 (2) 将其作为参数传递给您的 add 函数。 -
只是一个想法:如果编译器抱怨一个 undefined 变量,也许 defining 它可能会有所帮助?哦,还有:C 不支持方法。
main也是 C++ 中的一个函数。 -
至于你上次的征集意见,你学习C是被表扬的,没有更高级的语言可以帮助你理解编码并培养良好的技能,无论如何都会让你成为更好的程序员你最终编码的语言。了解 C 有很多内容(没有双关语),所以关键是放慢速度,享受学习过程,在这样的网站上积极主动,结交朋友使用 手册页,始终编译时启用 警告(例如,在您的编译字符串中使用
-Wall -Wextra)并且在编译干净且没有警告或错误的情况下不接受代码。