指针和引用的区别
来源:互联网 发布:阿里云盒子刷安卓系统 编辑:程序博客网 时间:2024/06/04 18:07
1.指针和引用的定义和性质区别:
(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。
(2)可以有const指针,但是没有const引用;
(3)指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)
(4)指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;
(5)指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了。
(6)”sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小;
(7)指针和引用的自增(++)运算意义不一样;
2.指针和引用作为函数参数进行传递时的区别:
(1)指针作为参数进行传递:
#include<iostream>using namespace std;void test(int *p){ int a=1; p=&a; cout<<p<<" "<<*p<<endl;}int main(void){ int *p=NULL; test(p); if(p==NULL) cout<<"指针p为NULL"<<endl; system("pause"); return 0;}
运行结果为:
0x22ff44 1指针p为NULL
当把指针作为参数进行传递时,也是将实参的一个拷贝传递给形参,即上面程序main函数中的p何test函数中使用的p不是同一个变量,存储2个变量p的单元也不相同(只是2个p指向同一个存储单元),那么在test函数中对p进行修改,并不会影响到main函数中的p的值。
(2)引用作为参数进行传递:
#include<iostream>using namespace std;void test(int &a){ cout<<&a<<" "<<a<<endl;}int main(void){ int a=1; cout<<&a<<" "<<a<<endl; test(a); system("pause"); return 0;}
要同时修改指针以及指针指向的内容,可以利用指针的引用
#include<iostream>using namespace std;void test(int *&p){ int a=1; p=&a; cout<<p<<" "<<*p<<endl;}int main(void){ int *p=NULL; test(p); if(p!=NULL) cout<<"指针p不为NULL"<<endl; system("pause"); return 0;}
输出结果为:
0x22ff44 1指针p不为NULL
原文地址:http://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004869.html
0 0
- 指针和引用的区别
- 指针和引用的区别
- 指针和引用的区别
- 指针和引用的区别
- 指针和引用的区别
- 指针和引用的区别
- 指针和引用的区别
- 指针和引用的区别
- 引用和指针的区别
- 引用和指针的区别
- 指针和引用的区别
- 指针和引用的区别
- 引用和指针的区别
- 指针和引用的区别
- 指针和引用的区别
- 指针和引用的区别
- 指针和引用的区别
- 引用和指针的区别
- WebForm总结_application应用程序生命周期
- android 中的 ContentObserver (一)
- ASP.NET 页生命周期
- html+css
- Fragment生命周期2
- 指针和引用的区别
- 错误的结果2......VC/bin/cl.exe返回的最终解决方案
- 你真的需要一个小例子来了解一些事情!
- UITableView默认选中第一个cell
- Python 安装matplotlib,six,dateutil,pyparsing 完整过程
- 项目:片刻 DAY1 搭建框架结构
- iOS改变状态栏的字体颜色
- 当我开始爱自己
- Github入门