C/C++中指针、引用、数组、链表的区别
来源:互联网 发布:mac照片占用空间 编辑:程序博客网 时间:2024/04/29 19:25
一、指针与引用的区别
相同点:
二者都是地址概念(但指针指向一块内存,它的内容是所指向内存的地址,而引用则指的是内存块的别名);
不同点:
1)指针是一个实体,需要分配内存区域,但值可以为空;
引用则仅仅是个别名,不需要分配内存区域,且在定义中必须初始化;
2)引用初始化后不可变,指针可变【注解:引用初始化后不可变是指指向的变量地址不可变,而不是指向的变量的值不可变】;
3)指针和引用的(++、--)运算的意义不一样;
4)sizeof(引用)得到的是所指向的变量对象的大小, sizeof(指针)得到的是指针变量的字节数;
二、指针与数组可以替换使用,容易让人产生错觉二者是等价的,那么二者到底有什么区别呢?
数组:在静态存储区被创建或者在栈上被创建,数组名对应着一块内存(而不是指向),其地址与容量在生命期内保持不变,且数组的内容可以改变;
指针:可以随时指向任意类型的内存块,“可变”,所以指针更加灵活但也更加危险;
数组:用标准库函数strcpy进行复制,而不能使用b=a直接复制这将产生编译错误
指针:可以直接p=q,即将q的地址直接赋给了p
数组:sizeof(a)得到数组的容量
指针:sizeof(*p)得到指针变量的字节数,而不是指针p所指向内存的容量
char a[] = "hello world";char *p = a;cout<< sizeof(a) << endl; // 12字节cout<< sizeof(p) << endl; // 4字节
三、数组与链表的区别
二者都属于一种数据结构,从逻辑结构来看:
1)数组必须事先定义确定长度,不能适应数据动态增减空间(当数据增加时可能超出原申请的空间大小,当数据减小时存在空间浪费);但数组的优点就是可以根据下标直接访问对应元素;
2)链表动态地进行存储分配,可以适应动态的增减空间,但一个结点需要一个额外空间存储next指针指向下一个元素;链表的优点是可以方便的插入、删除元素;
从内存存储来看:
1)(静态)数组从栈中分配空间,对于程序员方便、快速,但自由度小;
2)链表从堆中分配空间,自由度大但是申请管理比较麻烦;
- C/C++中指针、引用、数组、链表的区别
- 【C++】指针,数组名,引用的区别
- C中指针与引用的区别
- c中指针与引用的区别
- C中数组与指针的区别
- 【C++】指针&引用的区别
- c/c++中指针数组和数组指针的区别
- c中指针数组与数组指针的区别
- 【C/C++】引用和指针的区别
- 【C/C++】指针与引用的区别
- C++/C中数组与指针的区别
- C、C++中引用与指针的区别
- C、C++中引用与指针的区别
- 【C/C++】数组和指针的区别
- c/c++--指针数组和数组指针的区别
- 指针与引用的区别 (MoreEffictive C++)
- C/C++ 指针与引用的区别
- 指针和引用的区别(C++)
- JAVA.抽象类与接口的几个特点与异同
- OpenCV3.1.0 + contrib编译
- 面试大全3
- 第五周项目3——(1)时间类
- Java设计模式 -- 适配器模式
- C/C++中指针、引用、数组、链表的区别
- Hrbust1658一笔画
- 星号图
- HDU 2063 过山车 (二分匹配 -匈牙利算法)
- hdu 1695 莫比乌斯反演
- uva10128(Queue)
- Leetcode 47. Permutations II
- pat乙级总结
- Centos下本地连接postgresql时出现认证错误的问题