在C中使用指针结构
如上所述,我正在尝试编辑上周编写的一些代码,旧代码:在C中使用指针结构,c,pointers,struct,C,Pointers,Struct,如上所述,我正在尝试编辑上周编写的一些代码,旧代码: 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 =
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 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;
}
}
struct像素;
对于(i=0;i您必须取消对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;
}
}
struct像素;
对于(i=0;i这是语法。切换pixel.*pixel\u b
for*(pixel.pixel\u b)
真不敢相信我没有试过,我想我试过了。非常感谢:)从第一次运行它开始,它感觉有点慢,尽管这可能只是想象,但理论上它会比原始方法慢吗?原则上没有理由认为它应该慢。取消引用是在编译时处理的。当然,编译器有时会很傻。
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;
}
}