结构体Sqlist L与Sqlist &L的区别

Sqlist &L只可用于c++中;其中&表示引用的意思,而在C中&只表示取址,因此C++中下列顺序表插入函数中的L实际就是原结构体
1.证明Sqlist &L就是k:

bool ListInsert(SeqList &L,int i,ElemType e){if(i<1||i>L.length+1)return false;if(L.length>=L.MaxSize)return false;for (int j=L.length;j>=i;j--)L.data[j]=L.data[j-1]; L.length++;L.data[i]=e;printf("%p\n",&L);//对L取地址打印return true;
}

证明,将ListInsert函数中的L进行取地址,将原结构体取址对比

int main(){SeqList k;int i=0,e=0;k.data=(ElemType *)malloc(sizeof(ElemType)*InitSize);k.MaxSize=20;while(i!=15){k.data[i]=i;printf("%d\t",k.data[i]);i++;              }k.length=i;printf("%p\n",&k); //原结构体地址printf("please input the number and the position that you want to insert:\n");scanf("%d%d",&i,&e);if((ListInsert(k,i,e))==true){printf("it is succeed and the result is:\n");for (int j=0;j<k.length;j++)printf("%d\t",k.data[j]);printf("%p\n",&k);//插入操作后 原结构体地址}else{printf("Sorry ,insert is false!!!");}free(k.data);return 0;
}

运行结果

可见插入前 插入后和函数中的L地址都是同一个,得证&L就是结构体k;

2.证明Sqlist L与原结构体并非同一结构体但是具有回传功能。
对ListInsert 函数稍作修改

bool ListInsert(SeqList L,int i,ElemType e){if(i<1||i>L.length+1)return false;if(L.length>=L.MaxSize)return false;for (int j=L.length;j>=i;j--)L.data[j]=L.data[j-1]; L.length++;L.data[i]=e;printf("%p\n",&L);//打印L地址for (int j=0;j<L.length;j++)//打印L数据printf("%d\t",L.data[j]);return true;
}

运行结果
可见原结构体K的地址插入前后并没有发生变化,而函数ListInsert的参数的结构体L地址却与k不同,证明传进去的Sqlist L在ListInsert函数中是一个与原结构体数据相同,但地址不同的结构体,从Sqlist L依旧有新插入的返回数据来看得证L具有回传功能。
如果采用传入Sqlist L该形式进行结构体修改,插入等操作时 ,当结构体数据量大时,数据会不断复制新的结构体,开辟新的空间,相比较Sqlist &L引用原结构体而言,在传参这一项就会使电脑变成双倍开销,不建议使用。
结论: 记得点赞收藏

结构体Sqlist L与Sqlist L的区别相关推荐

  1. c/c++ 结构体前加不加typedef有什么区别?

    结构体前面加不加typedef有什么区别? 为什么c程序中定义结构时经常要用到typedef呢?如: typedef struct _am_win_menutext { int idc int mes ...

  2. c语言sqlist结构体,c语言里 sqlist

    满意答案 cielkong 2018.08.12 采纳率:43%    等级:9 已帮助:463人 c语言里 sqlist?//定义顺序表L的结构体 typedef struct { Elemtype ...

  3. C语言中访问结构体成员时 点 . 和 箭头 - 的区别

    点(.)是用于结构体变量访问成员,箭头(->)是用于结构体指针访问成员. 例如: #include <stdio.h>int main(void) {struct Smy {int ...

  4. MYSQL_BIND结构体_bindColumn、bindParam与bindValue的区别

    实例 bindColumn:绑定一列到一个 PHP 变量(类似于list()函数为变量赋值) //连接数据库函数 functionconnect() { try { $dbh = new PDO(&q ...

  5. 单链表创建的LinkList L与LinkList *L区分的问题

    在学习线性表的存储结构中,很多人在学习线性表的链式存储结构即单链表时,有人会注意函数传参LinkList L与LinkList *L的问题,如下 下面展示一些 内联代码片. #include<s ...

  6. 链表的数据域怎么使用结构体_一步一步教你从零开始写C语言链表

    为什么要学习链表? 链表主要有以下几大特性: 1.解决数组无法存储多种数据类型的问题. 2.解决数组中,元素个数无法改变的限制(C99的变长数组,C++也有变长数组可以实现). 3.数组移动元素的过程 ...

  7. 常量 数组 函数 枚举 结构体与指针

    与指针括起来的是指针(*a) int const *a = &b; /* 常量指针 */ int (*a)[5]; /* 数组指针 */ int (*add)(int a, int b); / ...

  8. LinkList L与LinkList *L Lnode与*LinkList的区别

    typedef struct node {int data;struct node* next; }Lnode,*LinkList; 对于结构体前面加typedef是给结构体起了个别名, struct ...

  9. 链表中的LinkList L、LinkList *L

    对于LinkList L: L是指向定义的node结构体的指针,可以用->运算符来访问结构体成员,即L->elem,而(*L)就是个Node型的结构体了,可以用点运算符访问该结构体成员,即 ...

  10. 链表中LinkList L与LinkList *L的区别以及(*L).elem,L.elem L-next,(*L)-next的区别

    typedef struct Node{ int elem; struct node * next; }node,*LinkList;对于LinkList L: L是指向定义的node结构体的指针,可 ...

最新文章

  1. 哀悼日使站点变灰色调的方法
  2. DevExpress学习之DevExpress.XtraGrid.Columns.GridColumn
  3. 运维不得不知道的事 数据中心断电如何做
  4. Android实现程序之间的跳转
  5. C++ 堆、栈、自由存储区、全局静态存储区和常量存储区
  6. ERROR: Start Page at 'www/index.html' was not found
  7. 深度学习(六十二)SqueezeNet网络设计思想笔记
  8. python第九十一天----第十六周作业
  9. 基础知识—表达式与语句-表达式
  10. 程序员转行杀猪是种什么体验?
  11. paper 63 :函数比较:imfilter与fspecial
  12. 以云服务器产品为例,深度分析比对华为云、阿里云、腾讯云
  13. 第二章:x264视频制作meGUI工具安装
  14. C++-灰度图上色GrayToColor
  15. Spring 学习笔记(day02)
  16. HTML模拟唯品会登陆和注册页面
  17. Window 的标志
  18. XAMPP连接远程服务器数据库
  19. 汇编语言相关指令介绍(二)
  20. 研发团队如何借助Gitlab来做代码review

热门文章

  1. 2008 r2 server sql 中文版补丁_sql server 2008 r2 sp2免费版补丁
  2. Python 项目打包各种依赖包
  3. 【网络攻防原理与技术】第6章:特洛伊木马
  4. AutoIT如何制作自动化安装脚本-SketchUp 2017
  5. 基于IOS的仿微博系统
  6. c++用化简命题逻辑公式的方法设计一个5人表决开关电路,要求3人以上(含3人)同意则表决通过
  7. 遗传算法求解TSP及其变式
  8. 小程序开发——配置https后台接口访问
  9. 调戏木马病毒的正确姿势——上
  10. 安装ie9提示未能完成安装_升级Internet Explorer未能完成安装四种解决措施