我如何通过引用函数传递结构数组?
How do i pass an array of structs by reference to a function?
我需要编写一个函数,通过在二维结构数组中包含图像中的每个像素来反映图像。下面是我编写的函数,它基本上将最后一个像素与第一个像素切换等等,但我需要它来编辑原始数组而不是副本,这是它目前没有做的。下面是 main 中的函数以及函数的布局方式。任何输入都会有所帮助!
reflect(height, width, &image);
函数:
void reflect(int height, int width, RGBTRIPLE *image[height][width])
{
RGBTRIPLE temp;
for ( int i = 0 ; i < height ; i++)
{
for( int j = 0 ; j < width ; j++)
{
temp = image[i][j];
image[i][j] = image[i][width-j-1];
image[i][width-1-j]=temp;
}
}
}
结构如下图
typedef struct
{
BYTE rgbtBlue;
BYTE rgbtGreen;
BYTE rgbtRed;
} __attribute__((__packed__))
RGBTRIPLE;
结构数组是使用以下方法创建的:
// Allocate memory for image
RGBTRIPLE(*image)[width] = calloc(height, width * sizeof(RGBTRIPLE));
对于初学者来说,函数应该像
这样声明
void reflect(int height, int width, RGBTRIPLE image[height][width]);
或喜欢
void reflect(int height, int width, RGBTRIPLE image[][width]);
或喜欢
void reflect(int height, int width, RGBTRIPLE ( *image )[width]);
并称赞
reflect(height, width, image);
在函数中循环应该是这样的
for ( int i = 0 ; i < height ; i++)
{
for( int j = 0 ; j < width / 2 ; j++)
{
temp = image[i][j];
image[i][j] = image[i][width-j-1];
image[i][width-1-j]=temp;
}
}
我需要编写一个函数,通过在二维结构数组中包含图像中的每个像素来反映图像。下面是我编写的函数,它基本上将最后一个像素与第一个像素切换等等,但我需要它来编辑原始数组而不是副本,这是它目前没有做的。下面是 main 中的函数以及函数的布局方式。任何输入都会有所帮助!
reflect(height, width, &image);
函数:
void reflect(int height, int width, RGBTRIPLE *image[height][width])
{
RGBTRIPLE temp;
for ( int i = 0 ; i < height ; i++)
{
for( int j = 0 ; j < width ; j++)
{
temp = image[i][j];
image[i][j] = image[i][width-j-1];
image[i][width-1-j]=temp;
}
}
}
结构如下图
typedef struct
{
BYTE rgbtBlue;
BYTE rgbtGreen;
BYTE rgbtRed;
} __attribute__((__packed__))
RGBTRIPLE;
结构数组是使用以下方法创建的:
// Allocate memory for image
RGBTRIPLE(*image)[width] = calloc(height, width * sizeof(RGBTRIPLE));
对于初学者来说,函数应该像
这样声明void reflect(int height, int width, RGBTRIPLE image[height][width]);
或喜欢
void reflect(int height, int width, RGBTRIPLE image[][width]);
或喜欢
void reflect(int height, int width, RGBTRIPLE ( *image )[width]);
并称赞
reflect(height, width, image);
在函数中循环应该是这样的
for ( int i = 0 ; i < height ; i++)
{
for( int j = 0 ; j < width / 2 ; j++)
{
temp = image[i][j];
image[i][j] = image[i][width-j-1];
image[i][width-1-j]=temp;
}
}