gpt4 book ai didi

c - C : how to pass them as an argument to a function, 中未调整大小的矩阵在我的代码中操作并返回它们?

转载 作者:行者123 更新时间:2023-11-30 14:35:29 25 4
gpt4 key购买 nike

我想知道如何将可变行和列的矩阵传递给函数,在函数内部对其进行转换,然后在 C 中返回它。

这是我正在尝试构建以实现这一目标的代码。

#include <stdio.h>
#include <stdlib.h>


void **f(int **m, int w, int h);

int main()
{
int A[3][3]={{1,2,3},{4,5, 6},{7,8,9}};
int B[3][2]={{1,2},{3, 4}, {5, 6}};

f(A, 3, 3);
f(B, 3, 2);

return 0;
}

void **f(int **m, int w, int h )
{
int i,j;
int n[w][h];

for(i=0;i<w;i++)
{
for(j=0;j<h;j++)
n[i][j] = m[i][j] + 1;
printf("%5d", m[i][j]);
}
return 0;
}

其编译返回以下错误:

main.c:20:5: warning: passing argument 1 of ‘f’ makes pointer from integer without a cast [->Wint-conversion]
main.c:13:8: note: expected ‘int **’ but argument is of type ‘int’
main.c:21:5: warning: passing argument 1 of ‘f’ makes pointer from integer without a cast [->Wint-conversion]
main.c:13:8: note: expected ‘int **’ but argument is of type ‘int’
Segmentation fault (core dumped)

最佳答案

尽管多维数组长期以来一直是 C 语言中的二等公民,但现代版本为它们提供了更好的支持。如果函数参数列表中的实际数组之前包含数组大小,则它们可以构成该数组的维度。请注意,AB 现在是函数 f()最后参数:

void f(int w, int h, int m[w][h]);

int main()
{
int A[3][3]={{1,2,3},{4,5, 6},{7,8,9}};
int B[3][2]={{1,2},{3, 4}, {5, 6}};

f(3, 3, A);
f(3, 2, B);

return 0;
}

void f(int w, int h, int m[w][h])
{
int n[w][h];

int i, j;

for(int i;i<w;i++)
{
for(int j;j<h;j++)
n[i][j] = m[i][j] + 1;
printf("%5d", m[i][j]);
}
}

我不记得哪个版本的 C 引入了这个,但可以肯定 int **m 参数不正确,因为 m 不是指向指针的指针(或指针数组)。

同样重要的是,此语法不会强制根据参数对数组进行重新排序,因此如果在定义数组时它是 [10][3],它应该当您将其描述为函数时,为 [10][3] 。这是仅用于数组访问的语法糖。

关于c - C : how to pass them as an argument to a function, 中未调整大小的矩阵在我的代码中操作并返回它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58515425/

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