美文网首页
C语言数据结构-链表大解剖

C语言数据结构-链表大解剖

作者: 点一下我的id | 来源:发表于2018-12-17 21:30 被阅读0次
  1. 链表抽象结构解析
  2. 引用、解引用、指针、链表赋值取值

链表抽象结构解析

typedef struct LNode
{
    Book data;
    struct LNode *next;
}LNode,*LinkList;
LNode e;
LNode *p = &e;//创建一个指针变量p,指向结构体的实例对象
p->data = 100;//通过"->"的方式来向指针变量指向的结构体的具体内容赋值
//e->data = 50;//结构体自身是不支持这种指向的
(*p).age = 200;//*p直接取其指向的对象,此时也就相当于结构体e了,因此可以直接通过点语法进行赋值
LNode e = (*p);//直接取出指向的对象,赋值给e

引用、解引用、指针、链表赋值取值

int a = 1;
int *p1 = &a;//int *p1表示创建了一个指针变量p1,*表示p1是一个指针变量,
//int表示该指针变量指向的对象的类型;&表示取a的内存地址。
//将a的内存地址赋给指针变量p1的指向对象地址空间,
//或者说,让指针变量p1指向a。
int b = *p1;//右侧代表的是直接取出指向的对象,赋值给b,b=a
引用:它用来给一个对象提供一个替代的名字。引用是别名,不用重新开辟空间
&(取地址操作符)
*(解引用操作符)
*表示指针,**表示指针的指针。
若定义LinkList L,则L为单链表的头指针,若定义LNode p,则p为指向单链表中某个结点的指针,用p代表该结点。当然也可以使用定义LinkList p,这种定义形式 完全等价于LNode *p。
指针变量p:表示结点地址。
结点变量(*p):表示一个结点(数据元素也叫结点,是数据的基本单位)。
&和 * 为互补运算。
L->data==(*L).data
L完全等于&(*p)
L完全等于p
#include<iostream>
using namespace std;
void main(){
    int a=1;
    int *b;
    b=&a;//a的引用赋值给b
    cout<<(*b)<<endl;//解引用b,输出1
    int i=5;
    int &j=i;
    i=7;
    //j是一个引用类型, 代表i的一个替代名
    //i值改变时,j值也跟着改变,所以会输出i=7 j=7
    cout<<"i="<<i<<"j="<<j;
    //解引用操作符是:*。对于其定义书上并没有给出明确的定义,
    //不过其意思是对其得到操作数(必须为指针类型)所指变量的引用。
    //如有如下代码:
    int ival;
    int *ip=&ival;
    int &iref=*ip;//*ip就是ival的引用。
    //其等价于
    int &iref=ival;
    //的确,解引用是很好的说法。
    //一般说*是“取值”符号,对应的&是取地址符号,
    //但是,如果对一个结构的指针用*号,那还叫成取值就说不通了。
    struct foo a;
    struct foo * p = &a:是定义p为a的指针
    struct foo & b = a;就是声明b为a的引用
    //用p时要用->符号,或(*p).xxx来取成员
    //用b的话,就直接b.xxx来取成员
}

相关文章

网友评论

      本文标题:C语言数据结构-链表大解剖

      本文链接:https://www.haomeiwen.com/subject/sphhkqtx.html