【大话数据结构》学习体悟2-1

《大话数据结构》学习体悟

关于结构体和指针的使用

1.结构体的申明

typedef struct Node
{
	int data;
	struct Node *next;
}Node ,* LinkList;

2.创建结构体指针变量,指针没有初始化,指针引用结构体成员会报错。

LinkList L,P; //定义结构体指针
L->data  //指针未初始化,程序报错
L=P; //初始化结构体指针
L->data //OK

原因是指针在初始化之前,指针只知道的指向的是某个类型,指针的值不确定(指针的地址是确定的,声明指针的时候就开辟了内存空间),引用指针,起指向的内容不确定(指针在初始化之前,不能取出指针的值)。

3.调用函数,传递参数时,切记传递进来的参数在函数里面是一个临时的新的变量,新变量的值=传递的参数值,函数结束后,临时变量会被释放掉,只有通过指针才能够改变参数值。

LinkList InitList(LinkList L)
{
    L=(LinkList)malloc(sizeof(Node));  
    printf("初始化函数建立的头结点地址:%p\n",L);
    if(!L)
        return ERROR;
    L->next=NULL;    /* 指针域为空 */                
    return OK;
}

这里初始化函数的作用是无效的,函数里面L的值发生了改变,函数外面L的值不变

正确的做法是:

Status InitList(LinkList *L) 
{ 
    *L=(LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */
    if(!L) /* 存储分配失败 */
            return ERROR;
    (*L)->next=NULL; /* 指针  域为空 */
     printf("线性表的地址:%p\n",*L);
    return OK;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值