[英]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.