结构体Sqlist L与Sqlist L的区别
结构体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的区别相关推荐
- c/c++ 结构体前加不加typedef有什么区别?
结构体前面加不加typedef有什么区别? 为什么c程序中定义结构时经常要用到typedef呢?如: typedef struct _am_win_menutext { int idc int mes ...
- c语言sqlist结构体,c语言里 sqlist
满意答案 cielkong 2018.08.12 采纳率:43% 等级:9 已帮助:463人 c语言里 sqlist?//定义顺序表L的结构体 typedef struct { Elemtype ...
- C语言中访问结构体成员时 点 . 和 箭头 - 的区别
点(.)是用于结构体变量访问成员,箭头(->)是用于结构体指针访问成员. 例如: #include <stdio.h>int main(void) {struct Smy {int ...
- MYSQL_BIND结构体_bindColumn、bindParam与bindValue的区别
实例 bindColumn:绑定一列到一个 PHP 变量(类似于list()函数为变量赋值) //连接数据库函数 functionconnect() { try { $dbh = new PDO(&q ...
- 单链表创建的LinkList L与LinkList *L区分的问题
在学习线性表的存储结构中,很多人在学习线性表的链式存储结构即单链表时,有人会注意函数传参LinkList L与LinkList *L的问题,如下 下面展示一些 内联代码片. #include<s ...
- 链表的数据域怎么使用结构体_一步一步教你从零开始写C语言链表
为什么要学习链表? 链表主要有以下几大特性: 1.解决数组无法存储多种数据类型的问题. 2.解决数组中,元素个数无法改变的限制(C99的变长数组,C++也有变长数组可以实现). 3.数组移动元素的过程 ...
- 常量 数组 函数 枚举 结构体与指针
与指针括起来的是指针(*a) int const *a = &b; /* 常量指针 */ int (*a)[5]; /* 数组指针 */ int (*add)(int a, int b); / ...
- LinkList L与LinkList *L Lnode与*LinkList的区别
typedef struct node {int data;struct node* next; }Lnode,*LinkList; 对于结构体前面加typedef是给结构体起了个别名, struct ...
- 链表中的LinkList L、LinkList *L
对于LinkList L: L是指向定义的node结构体的指针,可以用->运算符来访问结构体成员,即L->elem,而(*L)就是个Node型的结构体了,可以用点运算符访问该结构体成员,即 ...
- 链表中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结构体的指针,可 ...
最新文章
- 哀悼日使站点变灰色调的方法
- DevExpress学习之DevExpress.XtraGrid.Columns.GridColumn
- 运维不得不知道的事 数据中心断电如何做
- Android实现程序之间的跳转
- C++ 堆、栈、自由存储区、全局静态存储区和常量存储区
- ERROR: Start Page at 'www/index.html' was not found
- 深度学习(六十二)SqueezeNet网络设计思想笔记
- python第九十一天----第十六周作业
- 基础知识—表达式与语句-表达式
- 程序员转行杀猪是种什么体验?
- paper 63 :函数比较:imfilter与fspecial
- 以云服务器产品为例,深度分析比对华为云、阿里云、腾讯云
- 第二章:x264视频制作meGUI工具安装
- C++-灰度图上色GrayToColor
- Spring 学习笔记(day02)
- HTML模拟唯品会登陆和注册页面
- Window 的标志
- XAMPP连接远程服务器数据库
- 汇编语言相关指令介绍(二)
- 研发团队如何借助Gitlab来做代码review
热门文章
- 2008 r2 server sql 中文版补丁_sql server 2008 r2 sp2免费版补丁
- Python 项目打包各种依赖包
- 【网络攻防原理与技术】第6章:特洛伊木马
- AutoIT如何制作自动化安装脚本-SketchUp 2017
- 基于IOS的仿微博系统
- c++用化简命题逻辑公式的方法设计一个5人表决开关电路,要求3人以上(含3人)同意则表决通过
- 遗传算法求解TSP及其变式
- 小程序开发——配置https后台接口访问
- 调戏木马病毒的正确姿势——上
- 安装ie9提示未能完成安装_升级Internet Explorer未能完成安装四种解决措施