读书人

请问:结构体成员指针下面哪种方法正确

发布时间: 2012-03-28 15:40:03 作者: rapoo

请教:结构体成员指针下面哪种方法正确?
typedef struct {

UCHAR *dataContent;
ULONG color;
}bitmap;

如果让 bitmap.dataContent 指向FirstBMP所在的内存地址,

下面哪种写法正确啊?
为什么?


1. bitmap.dataContent=&FirstBMP;(这种方式我觉得正确,可好像不对)

2. bitmap.dataContent=(UCHAR *)&FirstBMP;

请教:

[解决办法]
1. bitmap.dataContent=&FirstBMP;(这种方式我觉得正确,可好像不对)

2. bitmap.dataContent=(UCHAR *)&FirstBMP;

按你的问题 FirstBmp可能是个bitmap,所以要用(UCHAR *)&FirstBMP强制转换
要想用第一种方法,就要修改结构了
typedef struct
{
bitmap* dataContent; //定义dataContent为bitmap*
ULONG color;
}bitmap;


[解决办法]
你这么写是不行的吧
typedef struct
{
bitmap* dataContent; //定义dataContent为bitmap*
ULONG color;
}bitmap;

可以写成
typedef struct
{
void* dataContent;
ULONG color;
}bitmap;
或者
typedef struct BMP
{
struct BMP* dataContent;
ULONG color;
}bitmap;

[解决办法]
o 没看完

(UCHAR *)是强制类型转换, 把这个结构体转换成 (UCHAR *)
虽然可以通过, 程序很可能要出错

按你的意思, 应该是

bitmap.dataContent=FirstBMP.c

[解决办法]
SettingMenu的地址跟他第一个成员的地址是一样的
所以(UCHAR *)&SettingMenu = SettingMenu.dataContent;

我个人不推荐用这种写法(简写),让程序很难懂
[解决办法]
因为:SetupMenu_BG[1].dataContent 是 UCHAR *类型,
而 &SettingMenu 是 FirstBMP * 类型,
显然不能直接:SetupMenu_BG[1].dataContent = &SettingMenu;

所以需要一个类型转换:
SetupMenu_BG[1].dataContent=(UCHAR *)&SettingMenu;
datacontent 存放的是一个变量数组的起始地址。

读书人网 >C语言

热点推荐