在 C 中使用指针结构
Using a struct of pointers in C
如上所述,我正在尝试编辑我上周写的一些代码,旧代码:
char *pixel_b = NULL;
char *pixel_g = NULL;
char *pixel_r = NULL;
for (i=0;i<416;i++)
{
for (j=0;j<576;j++)
{
pixel_b = &framebuff[GET_PIXEL_B(j,i)];
pixel_g = &framebuff[GET_PIXEL_G(j,i)];
pixel_r = &framebuff[GET_PIXEL_R(j,i)];
*pixel_b = 255-*pixel_b;
*pixel_g = 255-*pixel_g;
*pixel_r = 255-*pixel_r;
}
}
这成功访问了数组中的字节并更改了值(用于反转图像)。
我想创建一个包含三个像素值的结构,如下所示:
struct Pixel {
char *pixel_b;
char *pixel_g;
char *pixel_r;
};
然后把第一段代码改成:
struct Pixel pixel;
for (i=0;i<416;i++)
{
for (j=0;j<576;j++)
{
pixel.pixel_b = &framebuff[GET_PIXEL_B(j,i)];
pixel.pixel_g = &framebuff[GET_PIXEL_G(j,i)];
pixel.pixel_r = &framebuff[GET_PIXEL_R(j,i)];
pixel.*pixel_b = 255-pixel.*pixel_b;
pixel.*pixel_g = 255-pixel.*pixel_g;
pixel.*pixel_r = 255-pixel.*pixel_r;
}
}
然而,您似乎不能只这样做 :P 所以在仔细查看之后,我认为最好将 pixel 更改为 *pixel,并且其中没有指针,但事实并非如此似乎也有效。有什么好方法可以做我想做的事吗?我已经有一段时间没有在 C 中使用结构了,所以我部分地希望我忘记了一些非常基本的东西。
如有任何帮助,我们将不胜感激。
您必须取消引用 struct.field,而不仅仅是字段。的优先级。运算符高于 * 取消引用运算符,因此不需要括号。
struct Pixel pixel;
for (i=0;i<416;i++)
{
for (j=0;j<576;j++)
{
pixel.pixel_b = &framebuff[GET_PIXEL_B(j,i)];
pixel.pixel_g = &framebuff[GET_PIXEL_G(j,i)];
pixel.pixel_r = &framebuff[GET_PIXEL_R(j,i)];
*pixel.pixel_b = 255 - *pixel.pixel_b;
*pixel.pixel_g = 255 - *pixel.pixel_g;
*pixel.pixel_r = 255 - *pixel.pixel_r;
}
}
是语法。将 pixel.*pixel_b
切换为 *(pixel.pixel_b)
。
如上所述,我正在尝试编辑我上周写的一些代码,旧代码:
char *pixel_b = NULL;
char *pixel_g = NULL;
char *pixel_r = NULL;
for (i=0;i<416;i++)
{
for (j=0;j<576;j++)
{
pixel_b = &framebuff[GET_PIXEL_B(j,i)];
pixel_g = &framebuff[GET_PIXEL_G(j,i)];
pixel_r = &framebuff[GET_PIXEL_R(j,i)];
*pixel_b = 255-*pixel_b;
*pixel_g = 255-*pixel_g;
*pixel_r = 255-*pixel_r;
}
}
这成功访问了数组中的字节并更改了值(用于反转图像)。
我想创建一个包含三个像素值的结构,如下所示:
struct Pixel {
char *pixel_b;
char *pixel_g;
char *pixel_r;
};
然后把第一段代码改成:
struct Pixel pixel;
for (i=0;i<416;i++)
{
for (j=0;j<576;j++)
{
pixel.pixel_b = &framebuff[GET_PIXEL_B(j,i)];
pixel.pixel_g = &framebuff[GET_PIXEL_G(j,i)];
pixel.pixel_r = &framebuff[GET_PIXEL_R(j,i)];
pixel.*pixel_b = 255-pixel.*pixel_b;
pixel.*pixel_g = 255-pixel.*pixel_g;
pixel.*pixel_r = 255-pixel.*pixel_r;
}
}
然而,您似乎不能只这样做 :P 所以在仔细查看之后,我认为最好将 pixel 更改为 *pixel,并且其中没有指针,但事实并非如此似乎也有效。有什么好方法可以做我想做的事吗?我已经有一段时间没有在 C 中使用结构了,所以我部分地希望我忘记了一些非常基本的东西。
如有任何帮助,我们将不胜感激。
您必须取消引用 struct.field,而不仅仅是字段。的优先级。运算符高于 * 取消引用运算符,因此不需要括号。
struct Pixel pixel;
for (i=0;i<416;i++)
{
for (j=0;j<576;j++)
{
pixel.pixel_b = &framebuff[GET_PIXEL_B(j,i)];
pixel.pixel_g = &framebuff[GET_PIXEL_G(j,i)];
pixel.pixel_r = &framebuff[GET_PIXEL_R(j,i)];
*pixel.pixel_b = 255 - *pixel.pixel_b;
*pixel.pixel_g = 255 - *pixel.pixel_g;
*pixel.pixel_r = 255 - *pixel.pixel_r;
}
}
是语法。将 pixel.*pixel_b
切换为 *(pixel.pixel_b)
。