指针和引用、指针和数组以及数组和链表

指针和引用

指针是一个变量,该变量专门存放内存地址。指针的类型取决于其指向的数据类型,指针的特点是它可以访问所指向的内存。

指针利用地址,它的值直接指向存在电脑存储器中的另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”,意思是通过它能找到以它为地址的内存单元。

引用其实就是某一变量的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法为:类型标识符 &引用名=目标变量名。定义引用的方法与定义指针相似,只不过*变成了&。

指针与引用的区别

  1. 指针有自己的一块空间,而引用只是一个别名

  2. 使用sizeof()查看指针的大小是为4,而引用则是被引用对象的大小

  3. 指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象的引用

  4. 作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引用的修改都会改变引用所指向的对象

  5. 可以有const指针,但没有const引用(?有待商榷)

  6. 指针在使用中可以指向其他对象,但是引用只能是一个对象的引用,不能被改变

  7. 指针可以有多级,**p,而引用只有一级

  8. 指针和引用使用++运算符的意义不一样

  9. 如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏

指针和数组

指针

数组

保存数据的地址

保存数据

间接访问数据,首先获得指针的内容,然后将其作为地址,从该地址中提取内容

直接访问数据

通常用于动态的数据结构

通常用于固定数目且数据类型相同的元素

通过malloc分配内存,free释放

隐式分配内存与删除

通常指向匿名数据,操作匿名函数

自身即为数据名

数组和链表

数组的特点:数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中的任何元素。数组的插入数据和删除数据效率较低,插入数据时,插入位置后的数据在内存中都要向后移动。删除数据时,删除位置后面的数据都要往前移动。但是数组的随机读取效率很高,因为数组是连续的,知道每一个数据的内存地址,可以直接找到该地址的数据。如果程序需要快速访问数据,插入和删除很少使用时,就应该使用数组这个数据结构。数组需要预留空间,在使用前要先申请内存的大小,可能会浪费空间。同时数组不利于扩展,数组定义的空间不够时要重新定义数组。

链表的特点:链表中的元素在内存中不是顺序存储的,而是通过存储在元素中的指针联系到一起的。比如,上一个元素有个指针指到下一个元素。如果要访问链表中的一个元素,需要从第一个元素开始,一直找到需要访问的元素为止。但是如果要增加和删除元素的时候,对于链表来说就非常简单了,只需要修改元素中的指针就可以了。如果程序需要经常插入和删除元素就可以使用链表数据结构。链表不用指定大小,扩展起来很方便。

总的来说,数组随机访问性强,查找速度快,但是其插入和删除效率低,定义时需要指定大小,可能会浪费内存,不能动态扩展,同时内存空间要求高,必须得有足够的连续的内存空间。

链表的插入删除速度很快,内存利用率高,不会浪费内存,大小不需要指定,扩展内存很灵活。但是链表不能随机访问,必须从第一个开始遍历,查找效率低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值