C语言 对指针地址的操作

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;
}
}

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

我来扯淡

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的找寻地址方式。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-06
以上函数的作用是对于坐标为(x,y)的一个像素点,判断其是否在规定的矩形内,若是则将其赋值为c。GRPH_Buffer是指向图像数据开始,也就是像素点(0,0)的指针,但其是void*类型的,因此需要在前面加上(PIXEL *)做强制类型转换。在GRPH_Buffer基础上移动 x + y * GRPH_width(GRPH_width是图像一行的像素个数)个单位,就得到了点(x,y)的指针本回答被提问者采纳
相似回答