了解如何从内部函数更新原始二维数组
Posted
技术标签:
【中文标题】了解如何从内部函数更新原始二维数组【英文标题】:Understanding how to update original 2D array from inside function 【发布时间】:2019-05-14 23:33:42 【问题描述】:我了解如何将二维数组传递给 C 中的函数,但我希望函数更新原始结构而不是其副本。我该怎么办?为什么我使用的方法会创建结构的副本 - 我的印象是它是另一种等效于使用指针的语法?
感谢您的帮助。我在下面包含了代码 sn-ps:
声明变量
int R[rowsize][colsize], G[rowsize][colsize], B[rowsize][colsize];
int Rnew[rowsize][colsize], Gnew[rowsize][colsize], Bnew[rowsize][colsize];
初始化函数
void blur(int rowsize, int colsize, int R[][428], int G[][428], int B[][428], int Rnew[][428], int Gnew[][428], int Bnew[][428])
. . .
注意:在此函数中,Rnew
、Gnew
和 Bnew
应该更新 - 每个都是二维数组。我希望这样做 不返回任何内容。
调用函数
blur(rowsize, colsize, R, G, B, Rnew, Gnew, Bnew)
【问题讨论】:
你确定它会复制吗? 声明为int R[][428]
的函数参数会自动调整为“指向428数组的指针int
”(即int (*)[428]
)。类型为int [][428]
的数组的函数参数会自动转换为指向该数组第一个元素的指针(并且,由于它是一个数组数组,因此第一个元素是一个数组)并且类型为int (*)[428]
。结果是传递给函数的不是数组,而是指向其第一个元素(数组)的指针。使用该指针所做的更改将影响原始数组。
【参考方案1】:
你可以试试这个方法..
# include <stdio.h>
#define rowsize 3
#define colsize 3
int main()
int R[rowsize][colsize]=1,2,3,4,5,6,7,8,9;
int Rnew[rowsize][colsize];
copy_from_R_to_Rnew(R,&Rnew);
int i,j;
for(i=0;i<rowsize;i++)
for(j=0;j<colsize;j++)
printf("\t %d",Rnew[i][j]);
printf("\n");
return(0);
void copy_from_R_to_Rnew(int *R,int *Rnew)
int i,j;
for(i=0;i<rowsize;i++)
for(j=0;j<colsize;j++)
*(Rnew+i*colsize+j) = *(R+i*colsize+j);
【讨论】:
这不是一个好的答案。它应该在编译时给你几个警告,你的类型不匹配。您没有将int
指针传递给您的函数。以上是关于了解如何从内部函数更新原始二维数组的主要内容,如果未能解决你的问题,请参考以下文章