最近在碰到一个问题,先定义两个结构体:
- struct PT_2D
- {
- double x;
- double y;
- };
- struct PT_3D: public PT_2D
- {
- double x;
- double y;
- double z;
- };
- void Draw(PT_2D *pts,int num)
- {
- //...
- pts++;
- //...
- }
要在Draw函数中将num个点绘制出来,在Draw函数里进行的任何操作真是对PT_2D指针的,因此,如果传入一个PT_3D就会出现问题pts++将只会向后移动sizeof(PT_2D)个字节,其实这是一个很显然的问题,只是在潜意识里将指针智能化了!
怎么解决这个问题呢?如下:
- //sizeofstep为传入指针的移动步幅
- void Draw(PT_2D *pts,int num,int sizeofstep)
- {
- BYTE *pByte = pts;
- pByte = pByte + sizeofstep; //移到下一个元素
- pts = (PT_2D*)pByte;
- }
指针的++运算所后移的字节数由指针类型决定。