gpt4 book ai didi

c - C 中的参数和返回数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:45:03 24 4
gpt4 key购买 nike

我是 C 的新手,正在学习 Stephen G. Cochan 的“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 矩阵中的结果。还写了一个主程序来测试功能。

我在参数上做错了。

我得到的错误是:警告:返回从指针生成整数而不进行强制转换[默认启用]

传递“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;
}

最佳答案

函数可以通过两种方式将数据传回给调用者:

  • 返回一个值,并且
  • 更改数据结构,将指针作为参数传递给函数

第一种方法涉及复制,对于较大的值效率低下。当需要返回一个较大的值而不复制,或者需要返回多个结果时,首选第二种方式。

另一个问题是传递数组:您的调用应该传递不带索引的数组名称,如下所示:

transposeMatrix(matrixM,matrixN);

您的代码使用的是第二种策略。但是,它不需要返回任何其他内容。因此,函数的正确返回类型应该是 void,而不是 int。更改返回类型,并删除 return 语句以解决此问题。

Demo on ideone.

关于c - C 中的参数和返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25388485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com