在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;
    }
}