看不懂一行程序

yyy6210 2007-10-19 11:58:00
struct A *a;

a是一个指向A结构的指针。str是A中的一个char * 类型

a->str = (char *)a + sizeof(struct A);

上面这个没有看懂,请哪位说一下~~
...全文
185 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Arthur_ 2007-10-19
  • 打赏
  • 举报
回复
需要考虑到对齐
#define ALIAN_32 32 - 1

a- >str = (char *)a + (sizeof(struct A) + ALIAN)&~ALIAN;
_石头_ 2007-10-19
  • 打赏
  • 举报
回复
a- >str = (char *)a + sizeof(struct A); //给a- >str赋一个指向的地址
即以*a所指向的结构体的起始地址为基础,向高地址偏移一个结构体A的长度。
evileagle 2007-10-19
  • 打赏
  • 举报
回复
让a- >str指向a的值+结构体的大小,比如a指向0001H这个内存单元,结构体A的大小为2H,则a- >str就指向0003H这个内存单元
liluvu 2007-10-19
  • 打赏
  • 举报
回复
我觉得是指向a的这种结构的下一个对象
ckt 2007-10-19
  • 打赏
  • 举报
回复
a- >str = (char *)a + sizeof(struct A)
看表面是让str指向 a指向的对象 后

你可以看下你代码的上下文理解
yyy6210 2007-10-19
  • 打赏
  • 举报
回复
晕了,还是加不成分。提示:此帖发出时间不到5天

学到了不少东西,多谢以上各位!!!
yyy6210 2007-10-19
  • 打赏
  • 举报
回复
哦对了,a是个指针,,


&a表示该指针本身的地址!!!!!

理解的不深刻,谢了
_石头_ 2007-10-19
  • 打赏
  • 举报
回复
a是一个指向结构体的指针,&a表示该指针本身的地址,这个地址中存储的内容(即a)才是所指向的结构体的地址.
yyy6210 2007-10-19
  • 打赏
  • 举报
回复
继续问一下,a之前是有个:

a = (struct A*)malloc 的申请空间的语句的。

那为什么a- >str = (char *)a + sizeof(struct A); 语句不直接这样:

&a,取出a的地址呢??
_石头_ 2007-10-19
  • 打赏
  • 举报
回复
加分和揭帖要分为两次作才行,(我是这么做的----感觉好像论坛有bug)
yyy6210 2007-10-19
  • 打赏
  • 举报
回复
晕,怎么不能加分结帖 ~~~~~~

多谢大家乐
yyy6210 2007-10-19
  • 打赏
  • 举报
回复
差不多知道了
pangshuai1107 2007-10-19
  • 打赏
  • 举报
回复
结构体首地址->0001
0002
0003
0004
0005

a->str = (char *)a + sizeof(struct A);语句执行之后:

结构体首地址->0001
0002
0003
0004
0005
a->str -> 0006

个人看法....菜鸟级别的想法
zzyjsjcom 2007-10-19
  • 打赏
  • 举报
回复
ding...
把上下文给出来 a有初始化吗?
wbcuc 2007-10-19
  • 打赏
  • 举报
回复

a表示struct A *a此结构的首址;
(char *)a 把地址强制类型转换为指向字符型结构的指针;
sizeof(struct A)表示结构体的大小,
a- >str = (char *)a + sizeof(struct A); 表示了str存放该结构体的尾指针了,这样可以通过结构体的大小计算出结构体的首址了

70,032

社区成员

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

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