繁体   English   中英

在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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM