【顺序表】SqList *L是什么意思
//顺序表基本运算算法
#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef int ElemType;
typedef struct
{ ElemType data[MaxSize]; //存放顺序表元素int length; //存放顺序表的长度
} SqList; //顺序表的类型
void CreateList(SqList *&L,ElemType a[],int n)
//建立顺序表
{L=(SqList *)malloc(sizeof(SqList));for (int i=0;i<n;i++)L->data[i]=a[i];L->length=n;printf("L=%d\n", L);//此句仅测试使用,看一下L所指向的地址
}
int main(){SqList *Head = NULL;int a[5] = {1,2,3,4,5};CreateList(Head,a, 5);printf("Head=%d\n", Head);此句仅测试使用,看一下Head所指向的地址return 0;
}
有上面这样一段代码,CreateList函数中的参数SqList *&L是什么呢?实际上它是对结构体类型指针的引用,通常我们说函数的参数用&表示需要将传进去的参数“带回来”,比如下面代码:
#include <stdio.h>
int func(int &a){a = 5;
}
int main(){int x = 10;func(x);printf("x=%d", x);//输出结果为x=5
}
func参数为int &a,表示对整形变量的引用,即需要传入的参数需要为整形,结果将会被“带回来”,所以无论x值为多少,引用传参后值都会变为5。同理CreateList函数中的参数SqList *&L就是对SqList类型指针的引用,即main函数中无论SqList型指针Head原来指向什么(此处为NULL),传入CreateList后,与其中的L指向的都是同一个地址,通过两个printf可以进行验证。
如果去掉&,函数变为void CreateList(SqList *L,ElemType a[],int n)结果会怎样呢?
void CreateList(SqList *L,ElemType a[],int n)//仅将SqList *&L修改为SqList *L,其他均无变化
//建立顺序表
{L=(SqList *)malloc(sizeof(SqList));for (int i=0;i<n;i++)L->data[i]=a[i];L->length=n;printf("L=%d\n", L);//此句仅测试使用,看一下L所指向的地址
}
运行结果
可以看出不加引用,Head传入后仅仅相当于给L赋了一个初值,L指向的地址不会影响Head。
在单链表结构的定义过程中,严蔚敏版数据结构教材定义了结构体类型指针LinkList(typedef struct LNode *Linklist),所以在传递结构体指针的引用时,直接使用LinkList &L,而李春葆版本的数据结构教材没有这样的定义,传递参数使用LNode *&L
typedef struct LNode{ElemType data; //数据域struct LNode *next; //指针域
}LNode,*LinkList; // LinkList为Lnode类型的指针
关于引用传递:
1、实际上引用相当于给变量起别名,比如下面代码,j是i的引用,也就是j是i的别名,它们实际上就是一个东西,所以无论修改哪一个,另一个都会跟着变。
int i = 5;
int &j = i;
j = 10;
printf("i=%d, j=%d", i, j);//得到i和j的值都是10
2、传递引用给函数形参变化实参也发生变化,但是传递指针不一定,需要根据内部的操作具体判断。引用类型作形参,在内存中并没有产生实参的副本,它直接对实参操作;而一般变量作参数,形参与实参就占用不同的存储单元,所以形参变量的值是实参变量的副本。
参考文章:https://blog.csdn.net/tingfengx/article/details/8787218
https://blog.csdn.net/weixin_30580341/article/details/98689928?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-2.control&dist_request_id=c8fef2f1-72d2-4a36-95a4-6c3e78319eb6&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-2.control
【顺序表】SqList *L是什么意思相关推荐
- 顺序表Sqlist.cpp
顺序表Sqlist.cpp 文章目录 顺序表Sqlist.cpp 1 顺序表插入逻辑 2 顺序表删除逻辑 3 代码演示 4 运行结果 1 顺序表插入逻辑 在表的第 i 个位置前插入一个元素 实现步骤: ...
- 数据结构顺序表中 *L 和 *L
&是引用的意思,要返回到main里面进行操作.改变的顺序表需要带上&,如果只在对应函数操作的顺序表则不用.
- 顺序表(线性表的顺序存储)---C语言版
目录 顺序表 一.顺序表的定义 二.顺序表上基本操作的具体实现 1.`InitList_Sq(*L)`:初始化表.构造一个空的顺序表. 分类一:主函数里声明的是一个指向顺序表的指针 分类二:主函数里声 ...
- 6-2 有序顺序表的插入
本题要求实现递增顺序表的有序插入函数.L是一个递增的有序顺序表,函数Status ListInsert_SortedSq(SqList &L, ElemType e)用于向顺序表中按递增的顺序 ...
- 顺序表——有序顺序表的插入
本题要求实现递增顺序表的有序插入函数.L是一个递增的有序顺序表,函数Status ListInsert_SortedSq(SqList &L, ElemType e)用于向顺序表中按递增的顺序 ...
- 顺序表的查找C语言数据结构
在顺序表中查找元素 大致代码片有注释,若还有疑问,可进行评论 #include<stdio.h> #include<stdlib.h>#define Maxsize 10 // ...
- 6-2 有序顺序表的插入 (10 分)
6-2 有序顺序表的插入 (10 分) 本题要求实现递增顺序表的有序插入函数.L是一个递增的有序顺序表,函数Status ListInsert_SortedSq(SqList &L, Elem ...
- 顺序表-删除所有元素值为x结点(另建表存放+复制到原表)
顺序表的存储结构: typedef struct{int data[Maxsize]; //存在顺序表中的元素int length; //存放顺序表的长度}SqList; 分析: 这里要删除顺序表的所 ...
- 第3周实践项目1 顺序表的基本运算
/*copyright (t) 2017,烟台大学计算机学院 *All rights reserved. *文件名称:1.cpp *作者:邵雪源 *完成日期:2017年9月19日 *版本号:v1.0 ...
- 数据结构趣题——顺序表就地逆置
利用原表的存储空间将顺序表(a1,a2,--,an)逆置为(an,an-1,---a1). 1: #include <stdio.h> 2: #include <stdlib.h&g ...
最新文章
- Windows Live Messenger 正式版已经发布
- LibreOJ β Round #2
- asp oracle 分页显示,利用ASP实现Oracle数据记录的分页显示
- CSP认证201609-2	火车购票[C++题解]:模拟、vector、排序
- 【论文精读】PIFu: Pixel-Aligned Implicit Function for High-Resolution Clothed Human Digitization
- 浏览器显示无法解析服务器的DNS地址,使用搜狗浏览器时突然弹出无法解析服务器的DNS地址该如何处理...
- Linux编程练习 --多线程5--信号量(semaphore)
- C++——OOP(Object-Oriented Programming) vs. GP(Generic Programming)
- php和html开发工具,常用的php开发工具有哪些?
- ----------------------------------------spring 整合jdbc---------------------
- 自动生成构造方法、getter、setter
- 神经网络软件有哪些,神经网络分析软件
- 一、Java11安装
- AS 5637.1跟AS 3837是什么关系?
- 高德地图marker屏蔽Label
- Mac u盘加密没有 日志式加密选项
- 表格中单元格的间距设置
- 上海理工大学计算机专业考研难度,上海理工大学机械(专硕)专业考研难度分析-专业排名-难度大小...
- 观爱丽丝梦游仙境有感
- royaleapi中文版_皇室战争:CR锄强扶弱式平衡调整基本成型,精锐成4月扶贫对象...