代码中画图的一个函数岸 对上面指针的操作不是很理解 望解答~

void GRPH_Pset(int x, int y, PIXEL c)
{
PIXEL *p;

if ((x >= GRPH_clip_window_sx) && (y >= GRPH_clip_window_sy) &&
(x <= GRPH_clip_window_ex) && (y <= GRPH_clip_window_ey))
{
p=(PIXEL *)(GRPH_Buffer) + x + y * GRPH_width;
*p = c;
}
}

繁花如伊
浏览 96回答 2
2回答

狐的传说

我来扯淡void GRPH_Pset(int x, int y, PIXEL c)//x,y当然是PIXEL c的坐标了{PIXEL *p;if ((x >= GRPH_clip_window_sx) && (y >= GRPH_clip_window_sy) &&(x <= GRPH_clip_window_ex) && (y <= GRPH_clip_window_ey))//这个if语言是判断、、//PIXEL c是不是超出了某个界限了{//这个首先获取用于存储PIXEL这个数组GRPH_Buffer 。我猜测这个程序大概是这么//初始化的 GRPH_Buffer=(PIXEL *)malloc(sizeof(PIXEL)*size)//然后将GRPH_Buffer强制转换为(PIXEL *) ,因为是PIXEL *类型的指针了。所以//所以在GRPH_Buffer +1就是加PIXEL大小的地址(如果是int的话,比如有个int *p///那 p+1就是加int个大小的地址,这样就好理解了)。所以他加上了x+y*GRPH_width//个大小,赋值给p后,p指向的地址就是GRPH_Buffer+ x+y*GRPH_width的地址了p=(PIXEL *)(GRPH_Buffer) + x + y * GRPH_width;*p = c;//最后将PIXEL c的值赋值给p指向的位置。将c存储起来。}}//最后需要说的是这个二位数组其实就可以看成是一维数组,一般的二维数组是存储方式是按行存储,第一行存储完了存储第二行,以此类推。//但是你的这个程序创建数组应该是一维的。然后程序是按照行存储,即先将第一行存储完了,再存储第二列。所以才会有x + y * GRPH_width的找寻地址方式。

慕桂英546537

以上函数的作用是对于坐标为(x,y)的一个像素点,判断其是否在规定的矩形内,若是则将其赋值为c。GRPH_Buffer是指向图像数据开始,也就是像素点(0,0)的指针,但其是void*类型的,因此需要在前面加上(PIXEL *)做强制类型转换。在GRPH_Buffer基础上移动 x + y * GRPH_width(GRPH_width是图像一行的像素个数)个单位,就得到了点(x,y)的指针
打开App,查看更多内容
随时随地看视频慕课网APP