有个不懂的问题请教

zll_lover 2010-08-19 11:14:33
#define DATA_UNSET \
data_type_t type; \
buffer *key; \
int is_index_key; /* 1 if key is a array index (autogenerated keys) */ \
struct data_unset *(*copy)(const struct data_unset *src); \
void (* free)(struct data_unset *p); \
void (* reset)(struct data_unset *p); \
int (*insert_dup)(struct data_unset *dst, struct data_unset *src); \
void (*print)(const struct data_unset *p, int depth)

typedef struct data_unset {
DATA_UNSET;
} data_unset;

typedef struct {
DATA_UNSET;

int count;
} data_count;

main(){
data_count *dc;
...=(data_unset *)ds;
}
实在不理解为什么可以这样强制转换,虽然两个结构里面变量内容差不多相同,但是可以这样操作码?谢谢
...全文
95 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjd_yeyuhan2008 2010-08-19
  • 打赏
  • 举报
回复
#define CONST_STR_LEN(x) x, x ? sizeof(x) - 1 : 0

求string 的一种方法,X为字符串,sizeof(x) - 1为字符串长度。


#define CONST_BUF_LEN(x) x->ptr, x->used ? x->used - 1 : 0

不解,无X的具体数据结构。


另: 采用逗号运算符,在这里是不是有点多余?逗号运算符号前,变量并无变化。
zll_lover 2010-08-19
  • 打赏
  • 举报
回复
顺便捎带个问题
#define CONST_STR_LEN(x) x, x ? sizeof(x) - 1 : 0
#define CONST_BUF_LEN(x) x->ptr, x->used ? x->used - 1 : 0
这是什么意思呢谢谢
浅蓝马 2010-08-19
  • 打赏
  • 举报
回复
因为data_count的前面部分包含了data_unset的内容,
可以转换的。
DayDayUpCQ 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qlming 的回复:]

因为data_count的前面部分包含了data_unset的内容,
可以转换的。
[/Quote]
并且,计算机对结构体内容的存储都是顺序存储的。且任何类型的指针的字节数都等于机器字长,强制转换
即将ds所指空间的内容,以data_unset结构类型进行格式化。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧