LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 945|回复: 10

Gun C的链表允许接点的struct不同吗?

[复制链接]
发表于 2003-5-16 14:49:49 | 显示全部楼层 |阅读模式
Gun C的链表允许接点的struct不同吗?
如:
struct aa
{int data;
struct bb *next;
}aa;
struct bb
{
char data1;
struct bb *next;
}bb;
然后让aa->next = bb;

要是不行,在C里如何让不同结构的struct构成链表或者占据相邻的物理内存。
发表于 2003-5-16 16:01:50 | 显示全部楼层
想法很奇怪呀,为什么要这么做?
发表于 2003-5-16 17:11:38 | 显示全部楼层
链表占用的内存也不是相邻的
另外像你这样的写法是可以的
只是要强制类型转换

当然不推荐这样用
发表于 2003-5-16 18:08:03 | 显示全部楼层
当然可以了
在aa结构里存储的只是指针,指针只会占32bit的空间(在32位机下),如果你需要这样的链表,建议你建一个结构如下
struct aa
{
  int data;   //数据
  int type;   //指针指向的结构类型标志
  void * next;//指向下一个的指针
}

用的时候自己强制转换就行了
发表于 2003-5-16 18:32:46 | 显示全部楼层

为什么要这样用

harrypotter:


在C里如何让不同结构的struct构成链表或者占据相邻的物理内存


有什么意义?
 楼主| 发表于 2003-5-17 11:09:14 | 显示全部楼层
我在做一个OS设备分配的模型,需要若干结构不同的接点表示设备分配表,通道控制表等,一个设备分配就是构造一个这些接点的链就行。so....只是想试试看行不行。
发表于 2003-5-17 13:29:12 | 显示全部楼层
这样做会有问题
你可以定义一个其它链表
然后每个结点再保存结构不同的数据
 楼主| 发表于 2003-5-17 14:37:14 | 显示全部楼层
请斑竹讲的详细些。。。
发表于 2003-5-17 14:44:14 | 显示全部楼层
你想保留的结构
struct a{}
struct b{}

定义保留这些结构的链表
struct link{
  void*data;   //指向 a类对象还是b类对象
  int  datatype;//说明data是什么结构,1代表a,代表b
  link *next;
}

使用
struct a a1;
struct b b1;
struct link li1;
  li1.data=(void*)a1;
  li1.datatype=1;
  li1.Next=new link;
对B也同样处理

拿出来时
  if( li1.type==1){
   把data解释成a类型
}
 楼主| 发表于 2003-5-17 14:52:24 | 显示全部楼层
i'll try it ,thx!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表