初学数据结构,在学习的过程中有了这个疑问,已经理解其中缘由,特写篇博客和大家一起分享交流。

C++中的引用:&


int a=10;
int &ra=a;

注意:此处&是标识符,不是取地址符!

a是目标原名称,ra是引用名,由引用的作用“引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。”可知当改变ra的值时,a的值也会随之改变。

此处主要讲的是引用的<传递可变参数>的作用,如一下代码

c形式:

void swapint(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}

c++形式:

void swapint(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}

以上两种代码作用相同,c++形式的代码采用了引用的方法,那么该函数结束后a,b的值也会随之改变,

int 是所引用变量的类型

链表结构体指针的引用


我所使用的教材是武汉大学的教学教材,其中结构体结点的定义如下:

typedef struct node{ElemType data;struct node *next;
}Linknode;

几个常见的链表操作的函数:

bool createlink(linknode * &L,elemtype a[],int n)//创建链表
bool delete(linknode * &L,int i)//删除第i个元素e

其他一些相关的语句:

linknode * L;//创建头结点
L=(linknode *)malloc(sizeof(linknode));//为头结点分配空间

linknode * L,即声明了一个结构体的指针,L指向的是这个结构体的首地址,记该地址为A1

malloc 为这个结构体指针类型的变量L分配的一个内存空间,此时即L指向的地址为A2

linknode * &L,即引用了这个结构体指针类型的变量L,引用L则会改变L,记delete函数执行完后L指向的地址为A3

我自己写了个简单的程序,输出这三个地址,发现:A1!=A2,  A2=A3

说明在删除一个元素之后L指向的地址并没有发生改变

我试着去掉insert函数用对L的引用符,发现依旧可以正常的删除,那么就没必要用引用符

结论


后来在询问了老师之后,我最终得到了如下结论:

引用L是为了改变L的值,而L指向的是链表的头结点的地址,即要改变头结点的地址,但是一般改链都是对头结点之后的结点进行操作,所以头结点的地址一直没变,故去掉&后函数依旧可以正常执行。之所以会加&,是以防有的链表没有头结点,因为可能会对第一个结点操作,那L的地址就会改变。

关于如何理解链表结构体指针引用LinkNode * L的问题相关推荐

  1. 我在微信上大学:如何正确理解指针和结构体指针?

    一直觉得C语言较其他语言最伟大的地方就是C语言中的指针,有些人认为指针很简单,而有些人认为指针很难,当然这里的对简单和难并不是等价于对指针的理解程度. 为此在这里对C语言中的指针进行全面的总结,从底层 ...

  2. C6011取消指针null的引用(结构体指针或者malloc的注意)

    当我在vs中使用单链表时,在使用结构体指针的时候,意外发现一个隐含的问题,就是C6011"取消指针null的引用",此情况的根本原因就是未消除隐含空指针的危险. 问题描述 当我们使 ...

  3. 已知p是一个指向类a的数据成员m的指针_第三十八章、结构体指针、单向链表简介...

    最近比较忙,一下子有好几天没更新了,今天我们先来了解下结构体指针. 和普通的指针一样,结构体指针就是指向结构体变量的指针. 结构体指针指向的是结构体变量的起始位置. 1. 声明结构体指针 我们用一幅图 ...

  4. Linux C 深入分析结构体指针的定义与引用

    关于结构体的基础知识,网上书上都一大堆,这里就不赘述了,下面我们要学习的是结构体指针. 介绍结构体指针之前,先给大家看一个小程序: [cpp] view plaincopy #include < ...

  5. 对于单链表结构体中LinkList以及Lnode,*LinkList两种不同定义方式的个人理解

    在学习数据结构时,我们可以看到不同的书籍或者不同的人对于单链表结构体的定义是不一样的. 大致分为下面两种 第一种 typedef int ElemType; typedef struct Lnode{ ...

  6. c语言的结构体指针的引用,C语言中的指针、引用、数组、结构体

    指针.引用和取值 什么是指针?什么是内存地址?什么叫做指针的取值?指针是一个存储计算机内存地址的变量.在这份教程里"引用"表示计算机内存地址.从指针指向的内存读取数据称作指针的取值 ...

  7. 结构体指针struct stu *p;和结构体变量struct stu p;结构体为什么要用指针引用而不用变量引用

    只有"指针变量名"后面才能加"->",用指针取出结构体中的数据,就要用到"->",千万不要在成员名如 birthday 后面加& ...

  8. c语言结构体指针初始化

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

  9. C语言结构体指针初始化(转)

    reference: https://www.cnblogs.com/losesea/archive/2012/11/15/2772526.html 今天来讨论一下C中的内存管理. 记得上周在饭桌上和 ...

  10. 定义一个结构体指针需要分配存储空间?

    前言 问题的来源于在学数据结构的时候,C++的语法和C语言的语法竟然不一样. 1.首先函数的参数有两种传递方式,一个是值传递,一个是地址传递.当指针作为参数传递的时候,即为地址传递,但C++写的时候需 ...

最新文章

  1. Linxu终端gcc与gcc -c的区别
  2. /etc/rsyncd.conf
  3. ole db 错误 通讯链接失败_西门子PLC1200的S7通讯(同一项目下)--GET接收指令
  4. 图论算法(二)-最短路径的Dijkstra [ 单源 ] 和Floyd[ 多源 ] 解法(JAVA )
  5. 没人说得清深度学习的原理 只是把它当作一个黑箱来使
  6. 面试题:长方形个数计算
  7. LeetCode【344. 反转字符串】
  8. 如何下载sci论文?
  9. 2017年5月24日--2018年5月26日
  10. Arcgis 连接PostgreSQL
  11. 增量式PID计算公式完整详细推导过程
  12. 计算机辅助教学:多媒体课件制作教程,多媒体课件制作教案
  13. thinkphp 对接阿里云短信支付,其主要是新版composer对接阿里短信
  14. signature=0805b6a4f11b6551d9a746082990b689,Derived certificate based on changing identity
  15. 大量带BPM的跑步歌曲/跑步音乐下载
  16. 人性:《少年pi的奇幻漂流》和《一九四二》连看小感
  17. sql数据库包含关系查询
  18. 今天来和大家一起分享一下好玩的游戏---美国农场主
  19. html链接路径分为哪几种,什么是url地址?
  20. Vue全家桶 Vuex的详细介绍

热门文章

  1. Redisson 配置
  2. 学习webpack系列之一 ---- (手动部署环境)
  3. python线程监控_Python 使用摄像头监测心率!这么强吗?
  4. html浅色_html文本字体浅色
  5. 关于Python编码这一篇文章就够了
  6. 记一次2048小游戏开发
  7. 利用 vimdiff 递归对比文件夹差异
  8. javaScript 面向对象与原型
  9. Using Flume要点
  10. jsp 导出excel