指针和引用
指针是一个变量,该变量专门存放内存地址。指针的类型取决于其指向的数据类型,指针的特点是它可以访问所指向的内存。
指针利用地址,它的值直接指向存在电脑存储器中的另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”,意思是通过它能找到以它为地址的内存单元。
引用其实就是某一变量的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法为:类型标识符 &引用名=目标变量名。定义引用的方法与定义指针相似,只不过*变成了&。
指针与引用的区别
-
指针有自己的一块空间,而引用只是一个别名
-
使用sizeof()查看指针的大小是为4,而引用则是被引用对象的大小
-
指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象的引用
-
作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引用的修改都会改变引用所指向的对象
-
可以有const指针,但没有const引用(?有待商榷)
-
指针在使用中可以指向其他对象,但是引用只能是一个对象的引用,不能被改变
-
指针可以有多级,**p,而引用只有一级
-
指针和引用使用++运算符的意义不一样
-
如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏
指针和数组
| 指针 | 数组 |
| 保存数据的地址 | 保存数据 |
| 间接访问数据,首先获得指针的内容,然后将其作为地址,从该地址中提取内容 | 直接访问数据 |
| 通常用于动态的数据结构 | 通常用于固定数目且数据类型相同的元素 |
| 通过malloc分配内存,free释放 | 隐式分配内存与删除 |
| 通常指向匿名数据,操作匿名函数 | 自身即为数据名 |
数组和链表
数组的特点:数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中的任何元素。数组的插入数据和删除数据效率较低,插入数据时,插入位置后的数据在内存中都要向后移动。删除数据时,删除位置后面的数据都要往前移动。但是数组的随机读取效率很高,因为数组是连续的,知道每一个数据的内存地址,可以直接找到该地址的数据。如果程序需要快速访问数据,插入和删除很少使用时,就应该使用数组这个数据结构。数组需要预留空间,在使用前要先申请内存的大小,可能会浪费空间。同时数组不利于扩展,数组定义的空间不够时要重新定义数组。
链表的特点:链表中的元素在内存中不是顺序存储的,而是通过存储在元素中的指针联系到一起的。比如,上一个元素有个指针指到下一个元素。如果要访问链表中的一个元素,需要从第一个元素开始,一直找到需要访问的元素为止。但是如果要增加和删除元素的时候,对于链表来说就非常简单了,只需要修改元素中的指针就可以了。如果程序需要经常插入和删除元素就可以使用链表数据结构。链表不用指定大小,扩展起来很方便。
总的来说,数组随机访问性强,查找速度快,但是其插入和删除效率低,定义时需要指定大小,可能会浪费内存,不能动态扩展,同时内存空间要求高,必须得有足够的连续的内存空间。
链表的插入删除速度很快,内存利用率高,不会浪费内存,大小不需要指定,扩展内存很灵活。但是链表不能随机访问,必须从第一个开始遍历,查找效率低。
372

被折叠的 条评论
为什么被折叠?



