【发布时间】: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]。结果是传递给函数的不是数组,而是指向其第一个元素(数组)的指针。使用该指针所做的更改将影响原始数组。
标签: c arrays function pointers variable-assignment