Понимание того, как обновить оригинальный 2D-массив изнутри функции - PullRequest
0 голосов
/ 13 декабря 2018

Я понимаю, как передать двумерный массив функции в C, но мне бы хотелось, чтобы функция обновляла исходную структуру, а не ее копию.Как бы я пошел по этому поводу?Почему используемый мной метод создает копию структуры - у меня сложилось впечатление, что это был другой синтаксис, эквивалентный использованию указателя?

Спасибо за любую помощь.Ниже приведены фрагменты кода:

Объявление переменных

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)

1 Ответ

0 голосов
/ 13 декабря 2018

Вы можете попробовать этот способ ..

# 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);
     }
   }
}
...