那位解释一下“.”操作符

arden1019 2005-12-13 04:03:37
看到这样的论述:

*p.f 表示p偏移f 然后解除引用。
由此想到结构体中的字段的引用:
比如
struct Ds {
int a;
int b;

}dse;

是不是我在 dse.a时,也是做了偏移?

那天有位老兄告诉我,在填充结构内容时候可以直接按照结构的偏移量自动填充:
--------------------

from:http://community.csdn.net/Expert/topic/4446/4446058.xml?temp=5.347842E-02

不用这么麻烦吧!如果你向把文件中的数据写进结构体,只需要在把数据写进文件时,按你需要的结构体形式处理一下就可以了!

例如:
struct source
{
char s[10];
int i[10];
float f[10];
};
main()
{
FILE *fp;
struct soucre SOURCE;
struct source DEST;

fp=fopen("c:\\test.txt","wb");
fwrite(&SOURCE,sizeof(SOURCE),1,fp);
fclose(fp);

fp=fopen("c:\\test.txt","rb");
fread(&DEST,sizeof(SOURCE),1,fp);
fclose(fp)

//处理下面的DEST就OK了
printf(DEST.s);
printf(DEST.i);
printf(DEST.f);

}

---------------------

我对此不太明白。请各位大大讲解一下。
看看谁讲的最透彻...
...全文
371 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
arden1019 2005-12-28
  • 打赏
  • 举报
回复
大致明白了,响应goodluckyxl的号召结贴了..
Tycool 2005-12-27
  • 打赏
  • 举报
回复
.不就是直接定位到该结构成员吗?不用考虑对齐的问题,多好。
arden1019 2005-12-27
  • 打赏
  • 举报
回复
等待...
arden1019 2005-12-27
  • 打赏
  • 举报
回复
那像最上面的代码这样填充结构体,可以么?
fread(&DEST,sizeof(SOURCE),1,fp);


benjaming1981 2005-12-26
  • 打赏
  • 举报
回复
得注意 struct 的按多少字节对齐问题
如何指定对齐方式,和编译器有关
查编译器手册
arden1019 2005-12-22
  • 打赏
  • 举报
回复
有没有详细一点的解释,或者告诉我那里有相关参考文献,谢谢
shu_yoyo 2005-12-22
  • 打赏
  • 举报
回复
??
wupangzi 2005-12-22
  • 打赏
  • 举报
回复
是的!
可以自己写个程序,取地址看看!
Mr_Yang 2005-12-22
  • 打赏
  • 举报
回复
mark
arden1019 2005-12-22
  • 打赏
  • 举报
回复
我就是想知道结构体里面这个“.”运算符是怎么工作的 :)
zhousqy 2005-12-22
  • 打赏
  • 举报
回复
mark
goodluckyxl 2005-12-22
  • 打赏
  • 举报
回复
arden1019(暮眠) 你要什么参考
说明确一点 从你问题没有发现嘛
我再给你相关的内容
zcz0918 2005-12-14
  • 打赏
  • 举报
回复
默认的是4字节对齐就是#pragma pack(4)
lz的意思是不是根据指针偏移给结构赋值啊,那样做不好,
比如你这个结构体source如果用(int)*((&DEST)+10*sizeof(char)) = 5;
C++编不过。不过C下能跑,但是并没有让DEST.i[0] = 5;
lisypro 2005-12-14
  • 打赏
  • 举报
回复
太高深了
guyanhun 2005-12-13
  • 打赏
  • 举报
回复
struct Ds {
int a;
int b;

}dse;

是不是我在 dse.a时,也是做了偏移?

应该没有了吧,dse 的地址 和 dse.a 在这里是一样的吧 ~~
jixingzhong 2005-12-13
  • 打赏
  • 举报
回复
对齐,解决了机器平台相异状况, 解决这个了问题 ~
fiftymetre 2005-12-13
  • 打赏
  • 举报
回复
自然对齐的问题
Mr_Yang 2005-12-13
  • 打赏
  • 举报
回复
mark
arden1019 2005-12-13
  • 打赏
  • 举报
回复
哈哈,不是你的程序难理解,是我想明白更多东西 :)
屋顶上的老猫 2005-12-13
  • 打赏
  • 举报
回复
呵呵,我的程序有什么难以理解的吗?

70,023

社区成员

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

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