这种typedef写法到底是什么,该怎么处理

这种typedef写法到底是什么typedefstructlnode//链表定义...{intdata//数据域..structlnode*next//指针

这种typedef写法到底是什么
typedef   struct   lnode                             //链表定义...
{  
int   data   ;                                               //数据域..
struct   lnode   *next   ;                           //指针域..

}   lnode   ,   *linklist   ;
我都是这么写的
typedef   struct
{
...
}   Ds,
怎么现在的写法是这样的
typedef   struct   lnode  
{
...}lnode   ,这里第一个lnode是什么意思,名字吗,不象啊,
请指点,谢谢



[解决办法]
typedef XXXXXXXXX lnode,就是用lnode代替typedef后面那一串,类似别名
[解决办法]
struct后面的名字叫做“结构标记”,在你上面这种情况下是可有可无的;
结构标记主要是为了可以给一个结构命名,它就代表了结构体内的那些变量的声明了,所以可以用来
作为一个简写的形式。
[解决办法]
typedef struct lnode //链表定义...
{
int data ; //数据域..
struct lnode *next ; //指针域..

} lnode , *linklist ;

你就可以只用lnode这个表示struct lnode了
这样只是简化了以后的写代码操作,但是阅读起来还是不容易,所以建议声明定义结构体时不要用typedef
[解决办法]
我们老师好象说是没有什么联系的,只是字母一样而已.

[解决办法]
主要是声明变量时方便,
例如:
不用别名就应该这样声明
struct lnode a;
[解决办法]
typedef struct lnode
{
...} lnode ;

实际上是这样的

struct lnode
{
...} ;
typedef lnode lnode

所以第一个lnode是多余的,但是没错

[解决办法]
第二个lnode可以用来替代struct lnode
[解决办法]
typedef struct lnode
{
...}lnode ,这里第一个lnode是什么意思,名字吗,不象啊,
请指点,谢谢

lnode就是表示你定义的这个结构体,其实你写成这样和写成下面的两种方法这样是一样的:

第一种:
typedef struct //把这里原来的名字去掉了
{
...}lnode;

第二种:
typedef struct something //把这里随便取一个名字
{
...}lnode;

以后你用londe来定义对象的时候,都是表示这个对象是上面那种struct类型的对象
如lnode a;
就表示a是一个上面的那种结构体


[解决办法]
区别!
[解决办法]
恩,第一个就是你定义的类型的名字。
第二个是你定义的类型的一个对象。
如果去掉第一个的话,那么你定义的这个类型就只有一个对象,那就是紧跟在定义之后的那个。