“ - >”的无效类型参数(具有“颜色”)

时间:2014-12-16 17:16:19

标签: c pointers

我有以下源代码,它为图像,像素和读取像素值分配空间。

#include <stdlib.h>
#include <stdio.h>



typedef struct color
{
    int r,g,b;
}color;


typedef struct image
{
    int width, height;
    color *pixels;
}image;

image* CreateImage(int width, int height)
{

    imagem *im=NULL;
    im=(image*)malloc(sizeof(image));
    im->height=height;
    im->width=width;
    im->pixels=(color*)malloc(width*height*sizeof(color));

    int i;

    //error starts here
    for (i=0; i<width*height;i++)
    {
        scanf('%d', &im->pixels[i]->r);
        scanf('%d', &im->pixels[i]->g);
        scanf('%d', &im->pixels[i]->b);

    }


return im;
}

问题始于代码中读取图像像素的部分。当我编译它时,错误是'无效类型参数' - &gt;'(有'颜色')'

我知道我们必须使用' - &gt;'如果左操作数是指针。这里的图像和像素是指针,所以为什么我不能使用im-&gt; pixels [i] - &gt; r?我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

pixels确实是一个指针,但您对[]的使用已经取消引用它。你想要:

 &im->pixels[i].r

请注意,您的scanf调用应该有一个字符串作为第一个参数,而不是多字符文字 - 在那里使用双引号。

答案 1 :(得分:1)

scanf("%d", &im->pixels[i].r);

pixels[i] = *(pixels + i); /* [] has already dereferenced */

如上所示,您需要在scanf()中使用双引号而不是单引号

答案 2 :(得分:1)

如果您真的需要,可以使用->运算符:

( im->pixels+i )->r = 123 ;

这与

相同
im->pixels[i].r = 123 ;