gpt4 book ai didi

arrays - 通过引用函数传递二维数组

转载 作者:行者123 更新时间:2023-12-04 02:29:24 25 4
gpt4 key购买 nike

我正在尝试在 C 中使用二维数组添加两个矩阵。这里我将数组名称作为参数传递,我认为这是通过引用传递的。但是,我无法添加数组。 add 函数有问题,我无法添加数组。

我什至尝试使用 Operator 的地址传递参数,但是数组本身是指针,所以它出错了。我尝试传递数组名称。我卡住了

#include<stdio.h>
void input(int*,int*);
void add(int*,int*,int*);
void display(int*);

int main()
{
int a[3][3],b[3][3],sum[3][3];
input(a,b);
add(a,b,sum);
display(sum);
return 0;
}

void input(int*a,int*b)
{
for(int i = 0;i<3;i++)
{
for(int j =0;j<3;j++)
{
printf("Enter the element at a[%d][%d]",i+1,j+1);
scanf("%d",((a+i)+j));
}
}
for(int i = 0;i<3;i++)
{
for(int j =0;j<3;j++)
{
printf("Enter the element at b[%d][%d]",i+1,j+1);
scanf("%d",((b+i)+j));
}
}
}
void add(int* a,int*b,int*sum)
{
for(int i =0;i<3;i++)
{
for(int j=0;j<3;j++)
{
*(sum[i]+j) = *(a[i]+j) + *(b[i]+j);//error at this line
}
}
}

void display(int* sum)
{
printf("The sum is:\n");
for(int i =0;i<3;i++)
{
for(int j =0;j<3;j++)
{
printf("%d ",(sum[i]+j));
}
printf("\n");
}
}

出现以下错误

operand of '*' must be a pointer

但是我的操作数很容易是一个指针。

最佳答案

问题在于方法:

void input(int*, int*);
void add(int*, int*, int*);
void display(int*);

需要一个指针,但是您传递给它们的是二维数组(静态分配),即 int a[3][3], b[3][3], sum[3][3];。因此,正如评论中已经指出的那样,那些二维数组将被转换为 'int (*)[3]'。因此,您需要调整方法的签名以:

void input(int [][3], int [][3]);
void add(int [][3], int [][3], int [][3]);
void display(int [][3]);

void input(int a[][3], int b[][3]){
// the code
}

void add(int a [][3], int b [][3], int sum [][3]){
// the code
}

void display(int sum [][3]){
// the code
}

或者,如果你想保留 int* 作为参数,那么你可以做的是将矩阵分配为单个数组并相应地调整你的代码

关于arrays - 通过引用函数传递二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65278173/

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