【问题标题】: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]){
. . .
}

注意:在此函数中,RnewGnewBnew 应该更新 - 每个都是二维数组。我希望这样做 不返回任何内容。

调用函数

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


【解决方案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 指针传递给您的函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 2017-08-27
  • 2017-02-03
  • 2015-02-27
  • 2014-12-19
相关资源
最近更新 更多