顺序表SqList *&L是什么意思

Posted 阳光Cherry梦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序表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 *L,&L,Sqlist *&L

SqList *L 和 SqList * &L的区别/学习数据结构突然发现不太懂 小祥我查找总结了一下

6-1 顺序表创建和就地逆置 (10 分)

数据结构的问题!讲解一下每行的意思,尤其是那些sqlist,elemtype,L.length和L.data[i]的意思

数据结构问题 (Sqlist &l)与(Sqlist l)的区别

线性表的顺序存储结构——顺序表