typedef 与 指针连用

typedef struct LNode{  // Singly linked list Node
     int    data; 
     struct LNode   *next;   // Pointer to next node
}LNode,*LinkList;




int ListInsert_L(LinkList  &L, int i, int e)
{  LinkList s,p;
   int j;
   p = L; j = 0;
   while(p&&j<i-1){p=p->next;++j;}
   if(!p||j>i-1) return 0;
   s = (LNode *)malloc(sizeof(LNode));
   if(!s) return 0;
   s->data = e; 
   s->next = p->next; p->next = s;
   return 1;      }


 typedef  struct LNode LNode;

 typedef  struct LNode *LinkList;

第一个好理解,是为struct LNode 创建一个简单的别名,以后就用LNode代替它了。

那第二个理解成什么呢?我开始就理解成了指向这个LNode的指针LinkList.

但是这个函数调用里面吧,却把LinkList当成了一个别名或者一个类型,那是不是理解成因为有了typedef就创建了一个LinkList指针代表所有指向这个结构的指针。



后在百度知道里面找到了答案,证明我的猜测是正确的:



typedef struct 
{
...
}*Pstr; 
这个指针怎么用法?


举一个相似的例子,一般指向整型的指针都是如下使用的:
int *p ;   指向一个整型的指针。
如果,在前面我们使用了   typedef int * Pint;
则上面的声明方法,可以改为: Pint p;同样是声明一个指向整型的指针。

上面的结构体是一样的。也同样理解。
 
例如:
tyoedef int *Pint;
表示的意思并不是定义一个指向int型指针,而是表示定义一种新的数据类型,这种类型是指向int型的指针,那么如果下面有Pint a;则这时的a是指向int型指针
同理
typedef struct 
{
...
}*Pstr; 
表示定义一种数据类型,该类型是指向结构体的
所以下面如果有*Pstr  p;则p是一个指向结构体的指针
但是很显然p是悬垂指针,而题中这种情况是不能静态分配数据的
所以可以动态的分配一个空间来让p有所指向
C++可以这么做:p=new *p
C没有new语句,那么可以这么做:p=(Pstr)malloc(sizeof(*p));
全手打的,希望对你有帮助 
第二个疑惑:

insert函数里面为什么有个地址符,后来经过程序调试后,我觉得有没有这个地址符没有任何影响,因为本身L就被定义了是LinkList型的也就是说它指向的是这个结点结构的指针,里面本身存在的就是个地址,然后直接赋值给p。

地址符的作用应该是传进地址,如果说改成这样的int ListInsert_L(LinkList *L, int i, int e) 那么等于就是说L应该是指针的地址,调用的时候应该用&,而在里面赋值的时候应该是 p = *L;

  • 20
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值