在c语言中,如何从函数返回矩阵?
我的矩阵加法c代码如下所示:在c语言中,如何从函数返回矩阵?,c,C,我的矩阵加法c代码如下所示: mat(int n,int a[][5],b[][5] ){ int i,c[5][5]; for(i=0;i<5;i++){ for(j=0;j<5;j++) c[i][j]=a[i][j]+b[i][j]; return c; } 您可以通过引用传递 我不能用你的矩阵,因为我认为代码不是100%正确的。代码应该是这样的 int mat(int x, int y, const int *m_
mat(int n,int a[][5],b[][5] ){
int i,c[5][5];
for(i=0;i<5;i++){
for(j=0;j<5;j++)
c[i][j]=a[i][j]+b[i][j];
return c;
}
您可以通过引用传递 我不能用你的矩阵,因为我认为代码不是100%正确的。代码应该是这样的
int mat(int x, int y, const int *m_a, const int *m_b, int *m_out);
其中:
- 函数返回的int是一种状态代码
- x和y是矩阵的宽度和高度
- m_a,m_b是输入矩阵。它们是常量
- m_out是输出矩阵
int *mat(int x, int y, const int *m_a, const int *m_b, int *m_out){
// do some work
if (something is not OK)
return NULL;
else
return m_out;
}
// in main()
int a[5 * 6];
int b[5 * 6];
int result[5 * 6];
mat(5, 6, a, b, result);
// use result.
第三种选择,可能更糟糕——分配内存,并返回分配的内存。以后需要释放内存
int *mat(int x, int y, const int *m_a, const int *m_b){
int *m_out = malloc( x * y * sizeof int);
if (m_out == NULL)
return NULL;
// do some work
if (something is not OK){
free(m_out);
return NULL;
}else
return m_out;
}
// in main()
int *m = mat(5, 6, a, b);
// use m
free(m);
如有疑问,请发表评论
在所有示例中,我都假定为一维数组。您可以轻松地将二维坐标转换为一维坐标,请选中此处:
这里是完整的,工作的例子,我会这样做
#include <stdio.h>
int *mat(int x, int y, const int *m_a, const int *m_b, int *m_out){
int i;
for(i = 0; i < x * y; ++i)
m_out[i] = m_a[i] + m_b[i];
return m_out;
}
void print_mat(int x, int y, const int *m){
int i, j;
for(i = 0; i < x; ++i){
for(j = 0; j < y; ++j)
printf("| %4d ", m[i * y + j]);
printf("|\n");
}
}
#define X 2
#define Y 2
int main(){
int a[X * Y] = { 1, 2, 3, 4 };
int b[X * Y] = { 1, 2, 3, 4 };
int result[X * Y];
int *r = mat(X, Y, a, b, result);
print_mat(X, Y, r);
return 0;
}
不能在C中返回数组! 调用函数需要定义输出矩阵(示例中为c[]),并将其作为参数传递给乘法函数 您的代码中还有更多错误需要修复。这是您的代码(刚刚格式化并添加了缺少的右括号):
#包括
mat(整数n,整数a[][5],整数b[][5])
{
int i,c[5][5];
对于(i=0;iI,在您的程序中,有许多其他错误与您的问题无关。请先开始更正它们。为什么-1?我看不到我的代码有任何问题不是我的否决票,而是int a[5,6];
是错误的。如果需要的话,函数参数仍然可以是OP中的固定大小数组,尽管将它们设置为指针+大小确实会使事情更加通用。拼写错误,固定。这就是为什么需要typedef,但我决定不加混淆。好吧,现在它甚至可以编译了。(免费完成家庭作业)嘿,尼克,我可以用c来声明变量维数组吗?…比如“int array[n][n]?”这并不能回答这个问题。一旦你有足够的数据,你就可以;相反,-当然,“你不能用c来返回数组”不需要提问者的澄清吗?我喜欢这种语法。不知道是否有可能作废打印材料(int r,int c,int m[r][c])
@Nick Yep这很好;在数组使用它之前,请确保声明中有r
和c
!这是原始的C99还是C11?@Nick非常确定C99,我用-std=C99
编译,我在许多编译器上使用过它,其中一些至少不支持所有的C11。@Nick Yep,显然这是C99的一个功能,ma在C11中可选(参见这里:)。它也不是在C++ O.O中。
#include <stdio.h>
int *mat(int x, int y, const int *m_a, const int *m_b, int *m_out){
int i;
for(i = 0; i < x * y; ++i)
m_out[i] = m_a[i] + m_b[i];
return m_out;
}
void print_mat(int x, int y, const int *m){
int i, j;
for(i = 0; i < x; ++i){
for(j = 0; j < y; ++j)
printf("| %4d ", m[i * y + j]);
printf("|\n");
}
}
#define X 2
#define Y 2
int main(){
int a[X * Y] = { 1, 2, 3, 4 };
int b[X * Y] = { 1, 2, 3, 4 };
int result[X * Y];
int *r = mat(X, Y, a, b, result);
print_mat(X, Y, r);
return 0;
}
[nmmm@zenbook HM3]$ gcc -Wall -Wpedantic x.c
[nmmm@zenbook HM3]$ ./a.out
| 2 | 4 |
| 6 | 8 |
[nmmm@zenbook HM3]$