位图中有这样一个定义
typedef struct tagBITMAPINFO
{
    BITMAPINFOHEADER bmiHeader;
    RGBQUAD            bmicolors[1];
};
为什么bmicolors[1]是一个指针?我想定义为RGBQUAD * bmicolors;这样才对吗。
谁能告诉我?

解决方案 »

  1.   

    你说的也对。但是,一般的格式是这样的:一个BITMAPINFOHEADER结构,后面跟着一个RGBQUAD数组。也就是说要求:BITMAPINFOHEADER和RGBQUAD 数组是紧挨着的。
    现在假如你需要的RGBQUAD 数组大小是200,那么一般是这样分配的:
    BITMAPINFO * p;
    p =(BITMAPINFO *) malloc(sizeof(BITMAPINFO)+sizeof(RGBQUAD)*(200-1)); 
    这样既保证BITMAPINFOHEADER和RGBQUAD 数组是紧挨着,又可以用p->bmicolors[n]来访问 RGBQUAD数组。在看看你的建议
    显然,RGBQUAD * bmicolors需要堆分配内存,那么不能保证“BITMAPINFOHEADER和RGBQUAD 数组是紧挨着”。另外,象这样的定义。是一种技巧,你在学习《windows程序设计》关于位图的章节中会多次看到。