关于结构体指针的赋值

clleady 2009-09-08 08:42:23
struct sk
{in a;
int age;
}data,*p;
如果要使指针p指向data中的成员a,正确的赋值语句是p=(struct sk*)&data.a
为什么不是p=&data.a
谢谢~
...全文
308 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
o_0
atom_09 2009-09-09
  • 打赏
  • 举报
回复
类型问题
JK0803_lijixiang 2009-09-09
  • 打赏
  • 举报
回复
学习
gl007001 2009-09-09
  • 打赏
  • 举报
回复
学习
wissup 2009-09-09
  • 打赏
  • 举报
回复
首先,这样强转貌似可以,但是有可能会造成逻辑错误。

其次,如果指针虽然存储的都是地址,但是指针也是有类型的,不然编译器不知道是把多大区域当成一个独立的数据,这就是类型起的作用,一般指针都是指的首地址,然后加上类型,CPU才能正确的取得操作数,否则不是乱套了。

最后,如果LZ用到一些不严格的编译器,说不定两种写法都可以,因为p=&data.a 这样的,编译器会帮你强转的。
starcat 2009-09-08
  • 打赏
  • 举报
回复
虽然地址一样, 但是长度(类型)不一样。

p = &data;
p->a(或 data.a);
不就行了?有啥好转换的。
whg01 2009-09-08
  • 打赏
  • 举报
回复
&data.a 是得到一个int *指针,加上(struct sk*)是把指针类型转换成和p。
在内存中,data的地址和a的地址是一样的。
  • 打赏
  • 举报
回复
因为需要类型转换啊
fox000002 2009-09-08
  • 打赏
  • 举报
回复
这种无理的转换只会降低可读性

弄个 int * 类型指针不行吗
wanjingwei 2009-09-08
  • 打赏
  • 举报
回复
a是int型呀,肯定得转换
mstlq 2009-09-08
  • 打赏
  • 举报
回复
因为类型不一致……
必须强制转换……

69,373

社区成员

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

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