我有以下源代码,它为图像,像素和读取像素值分配空间。
#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?我该如何解决这个问题?
答案 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 ;