C语言中结构体指针————注意问题

 C语言中结构体指针————注意问题

以例子说明————新建一个单链表并打印表中元素:

用尾插法

#include<stdio.h>


#include<stdlib.h>


typedef struct node{


int data;


struct node * next;


} *LinkedList;   //指向结构体node的指针      可以理解为创建了一个LinkedList指针代表所有指向这个结构的指针。表示结构体指针类型


// 创建新建链表函数


LinkedList  LinkedListCreat(int a[5])   // 返回指针类型


{


LinkedList p,L,tail;  //   定义了三个指向结构体note的指针


L=(struct node *) malloc(sizeof(struct node));  //  分配内存空间   ,返回空间地址 转化为指针 给L


///






tail=L;
int i;
for(i=0;i<5;i++)


{


p=(struct node*) malloc(sizeof(struct node));//为每个元素分配内存空间


p->data=a[i];


tail->next=p;


p->next=NULL;


tail=p;





tail->next=NULL;


return L;  // 返回LinkedList  指针类型。。。L指向新建的空间的第一个元素






}


//链表元素打印   


void LinkedListPrint(LinkedList L) //  传入地址


{


LinkedList  p;
p=L->next;


while(p!=NULL)


{


printf("%d",p->data); 


p=p->next;  //  修改指针


}


}


void main()


{


int a[5];
int i;


for(i=0;i<5;i++)
{


scanf("%d",&a[i]);


}


LinkedList L; 


L=LinkedListCreat(a);  


LinkedListPrint (L);


}



特别注意:

1.

typedef struct {...}*P; 这个指针怎么用法?
一般指向整型的指针都是如下使用的:int *p ;   指向一个整型的指针。在前面我们使用了   typedef int * Pint;则上面的声明方法,可以改为: Pint p;同样是声明一个指向整型的指针。typedef int *Pint;表示的意思并不是定义一个指向int型指针,而是表示定义一种新的数据类型,这种类型是指向int型的指针,那么如果下面有Pint a;则这时的a是指向int型指针同理typedef struct {...}*P; 表示定义一种数据类型,该类型是指向结构体的所以下面如果有P  p;则p是一个指向结构体的指针

2.内存分配malloc 的使用


L=(struct node *) malloc(sizeof(stuct node));


表示新开辟的 空间 是分配了一个

node 这个结构体这么大的空间(大小取决于note,sizeof(stuct node)表示结构体空间大小 ),然后把这个空间地址转换

node的这个指针类型,赋值给L。

(struct node *) 表示强制类型转换  ,括号内 struct node * 表示指向结构体的指针类型 。类似于LinkedList。  返回分配内存地址指针给L




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值