LinuxSir.cn,穿越时空的Linuxsir!

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

求教:关于指针的问题

[复制链接]
发表于 2003-4-21 15:31:55 | 显示全部楼层 |阅读模式
struct s{
char str[10];
struct s *next;
};
struct t{
int num;
struct t *next;
};

struct p{
//我希望有"一个"指针,根据需要指向struct s或t,不知可否实现?
};

(不要定义两个指针)
谢了!
发表于 2003-4-21 17:38:42 | 显示全部楼层
呵呵

struct st
{
  union
       {   
         int num;
         char data[];
       }danu;
struct st *next;
}
 楼主| 发表于 2003-4-21 17:45:57 | 显示全部楼层
如何使用?
举个例子吧。

谢谢!
发表于 2003-4-22 16:11:17 | 显示全部楼层
用强制转换不就可以了吗?

typedef struct s{
  char str[10];
  struct s *next;
};

typedef struct t{
  int num;
  struct t *next;
};

void *tmp;
s s_tmp, *void_to_s;
t t_tmp, *void_to_t;

tmp = &s_tmp;
void_to_s  = (s *) tmp

……

tmp = &t_tmp;
void_to_t  = (t *) tmp

……
发表于 2003-4-22 16:43:22 | 显示全部楼层
强制类型转换容易产生问题。小程序还问题不大,但大程序里面发生问题时很难找。除非必要,最好别这么用。
 楼主| 发表于 2003-4-22 17:03:09 | 显示全部楼层
明了!

union的那一种用法呢?


THANKS!
发表于 2003-4-24 03:22:46 | 显示全部楼层
最初由 zhyi100 发布
呵呵

define TYPE_INT 0;
define TYPE_STR 1;

struct st
{
  int type;
  union
       {   
         int num;
         char data[];
       }danu;
struct st *next;
}


  1. ...
  2. void demo_function(sturct st* p)
  3. {
  4.    if (p->type == TYPE_INT)
  5.       printf("%d\n", p->danu.num);
  6.    else if (p->type == TYPE_STR)
  7.       printf("%s\n", p->danu.data);
  8.    else
  9.       printf("WHAT?\n");
  10. }

复制代码
 楼主| 发表于 2003-4-24 09:30:03 | 显示全部楼层
THANKS VERY MUCH!

THANK ALL !
发表于 2003-4-24 20:13:55 | 显示全部楼层
用 void * 应该没问题,void * 是通用指针,就是用在这种情况下的,强制类型转换也没有什么问题,隐式类型转换才有问题。
 楼主| 发表于 2003-4-25 09:47:59 | 显示全部楼层
我也曾经用void*试过,但好像不行。

比如:
void * a;
struct s *sp;

a=sp;//不能这样赋值啊 因为a->str不能操作
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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