首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为何不用指针而用数组[1]解决方法

2012-03-31 
为何不用指针而用数组[1]调色板编程见到这样两个结构:typedef struct tagPALETTEENTRY { // peBYTE peRed

为何不用指针而用数组[1]
调色板编程见到这样两个结构:
typedef struct tagPALETTEENTRY { // pe 
  BYTE peRed; 
  BYTE peGreen; 
  BYTE peBlue; 
  BYTE peFlags; 
} PALETTEENTRY;
typedef struct tagLOGPALETTE { // lgpl 
  WORD palVersion; 
  WORD palNumEntries; 
  PALETTEENTRY palPalEntry[1]; //???????????
} LOGPALETTE; 
有一段代码是这样写的:
LOGPALETTE *pLogPal=(LOGPALETTE*)new char[sizeof(LOGPALETTE)+N*sizeof(PALETTEENTRY)];
if(pLogPal != NULL){
  pLogPal->palVersion=0x300;
  pLogPal->palNumEntries=N;
  for(int i=0; i<N; i++){
  pLogPal->palPalEntry[i].peRed=Red;
  ...
  }
}
不知道Windows为何定义PALETTEENTRY palPalEntry[1]; 而不直接用PALETTEENTRY *palPalEntry; 
前者有何优势吗?


[解决办法]

C/C++ code
因为数组有一个转换lvalue->rvalue也就是说数组名可以转换为对应的指针struct _test_a_s{   char buff[1];} a;struct _test_b_s{   char* buff;} b;首先这里的目的是实现变长结构b.buff引用到的是一个指针,而实际上想做的是向buff这个成员处写数据于是就得成了(char*)&b.buff而a的可以直接引用下面的例子能说明问题#include  <iostream>#include  <cstring>using namespace std; struct _test_a_s{    char buff[1];};struct _test_b_s{    char* buff;};int main(int argc, char* argv[]) {     _test_a_s * pa = (_test_a_s*)malloc(32);    _test_b_s * pb = (_test_b_s*)malloc(32);    strcpy(pa->buff, "123456");    /*strcpy(pb->buff, "123456");*/    strcpy((char*)&pb->buff, "123456");    cout << pa->buff << endl;    cout << (char*)&pb->buff << endl;    free(pb);    free(pa);    return 0; } 

热点排行