链表中指针类型转换的问题

duanius 2007-12-17 04:53:13
有个问题 假设一个链表头结点类型a 链表结点类型b
假设结构体:
struct b{float a;struct b *prev,*next;};
struct a{int a; struct b *next;};
a有成员head b有成员mid, end

很简单的程序如下
int main(int argc, char *argv[]){
struct a head;
struct b mid,end;
head.a=99;

head.next=∣
mid.prev=&head;
mid.next=&end;
end.prev=∣
end.next=NULL;

printf("%d\n",end.prev->prev->a);

return 0;
}

结果是无法打印出99 虽然mid的前指针类型和实际指向的类型不对应 但我记得指针存的是地址 无所谓类型 只要用的时候强制转换一下 然后用printf("%d\n",(struct a*)(end.prev->prev)->a); 来代替
我比较了下head和end.prev->prev的地址 都是一样的
也就是说 指针指的是对的 我觉得应该就是类型转换的问题
debug了下 显示就是类型转换的问题 int 被转换成float。。
但强制转换了程序又通不过。。。
应该是语法问题 所以请教下
...全文
85 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
duanius 2007-12-17
  • 打赏
  • 举报
回复
2楼正解 多谢!
hai040 2007-12-17
  • 打赏
  • 举报
回复
((struct a*)(end.prev->prev))->a
believefym 2007-12-17
  • 打赏
  • 举报
回复
mid.prev=&head;

mid.prev是b*,head是a,类型都不匹配

69,371

社区成员

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

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