C与C++之引用与指针
来源:互联网 发布:淘宝白搜是什么 编辑:程序博客网 时间:2024/04/29 03:41
一.为什么C++要使用引用。
在C语言中函数传参有俩中方式(传值和传址),在函数调用过程中会生成临时变量用形参代替,最终把实参传递给形参。优点:避免了函数调用的副作用,但无法改变形参的值。
void swap(int right ,int left)
{
int temp = right; //形参不可改变,
right = left;
left = temp;
}
要改变形参的值只能使用指针
void swap (int *_pleft , int * _pRight)
{
assert (NULL != _pleft && NULL != _pRight);
int iTemp = * _pleft;
*_pleft = * _pRight;
*_pRight = iTemp;
}
但指针不安全因此C++中使用引用。
二.引用
引用:即给已存在变量另取一个别名(类似于人的外号,但人还是这个人),即引用和该变量使用同一块内存空间
类型 &变量(对象名) = 引用变量名 (引用的类型和变量的类型必须是同一种类型)
void TestRef()
{
int iNum0 = 10;
int &iNum1 = iNum0;
int &iNum2 = iNum1;
// int &iNum3; // 定义引用时必须进行初始化
int &iNum6 = iNum0; //一个变量可以有多个引用
int iNum7 = 20;
// &iNum6 = iNum7; // 引用一旦定义,就不能够在改变
}
三.引用和指针的区别
1、引用在定义时必须初始化,指针没有要求。// int &iNum1=iNum0;
2、一旦一个引用被初始化为指向一个对象,就不能再指向其他对象,而指针可以在任何时候指向任何一个同类型对象 //int &iNum2 = iNum1; 即&iNum2不能指向其他对象
3、没有NULL引用,但有NULL指针。
4、在sizeof中含义不同:引用结果为引用类型的大小(int 、double、 char、、、、、 ),但指针始终是地址空间所占字节个数。
5、引用自加改变变量的内容(引用改变的是变量的值),指针自加改变了指针指向(指针改变的是变量的地址)
6、有多级指针,但是没有多级引用(引用只能指向一个对象)
7、引用比指针使用起来相对更安全
在C语言中函数传参有俩中方式(传值和传址),在函数调用过程中会生成临时变量用形参代替,最终把实参传递给形参。优点:避免了函数调用的副作用,但无法改变形参的值。
void swap(int right ,int left)
{
int temp = right; //形参不可改变,
right = left;
left = temp;
}
要改变形参的值只能使用指针
void swap (int *_pleft , int * _pRight)
{
assert (NULL != _pleft && NULL != _pRight);
int iTemp = * _pleft;
*_pleft = * _pRight;
*_pRight = iTemp;
}
但指针不安全因此C++中使用引用。
二.引用
引用:即给已存在变量另取一个别名(类似于人的外号,但人还是这个人),即引用和该变量使用同一块内存空间
类型 &变量(对象名) = 引用变量名 (引用的类型和变量的类型必须是同一种类型)
void TestRef()
{
int iNum0 = 10;
int &iNum1 = iNum0;
int &iNum2 = iNum1;
// int &iNum3; // 定义引用时必须进行初始化
int &iNum6 = iNum0; //一个变量可以有多个引用
int iNum7 = 20;
// &iNum6 = iNum7; // 引用一旦定义,就不能够在改变
}
三.引用和指针的区别
1、引用在定义时必须初始化,指针没有要求。// int &iNum1=iNum0;
2、一旦一个引用被初始化为指向一个对象,就不能再指向其他对象,而指针可以在任何时候指向任何一个同类型对象 //int &iNum2 = iNum1; 即&iNum2不能指向其他对象
3、没有NULL引用,但有NULL指针。
4、在sizeof中含义不同:引用结果为引用类型的大小(int 、double、 char、、、、、 ),但指针始终是地址空间所占字节个数。
5、引用自加改变变量的内容(引用改变的是变量的值),指针自加改变了指针指向(指针改变的是变量的地址)
6、有多级指针,但是没有多级引用(引用只能指向一个对象)
7、引用比指针使用起来相对更安全
1 0
- C与C++之引用与指针
- 【c++】指针与引用
- 【C++】指针与引用
- C++【引用与指针】
- 指针与引用c
- 【C++】指针与引用
- c,c++易错点之指针与引用
- c中指针与引用
- 指针与引用(C++)
- C/C++引用与指针
- 【C/C++】指针与引用的区别
- 【C++与C差异】引用与指针
- C/C++ 之指针与引用的区别
- 【每日一C之十二】指针与引用的区别
- C、C++基础知识之 引用与指针区别
- 指针与引用的区别 (MoreEffictive C++)
- java引用与C指针的异同
- C/C++ 指针与引用的区别
- Android之自定义圆形渐变、条形进度条
- redisclient鏈接失敗,提示redis服務器版本太低,解決方法
- unity-Behavior Designer行为树插件
- Python3实现TCP端口扫描器
- NSPredicate
- C与C++之引用与指针
- Android中IPC机制之(二)
- @Scheduled 使用
- knn进行二维样本集分类
- Android单线程断线续传(数据库存储下载节点)
- Android自定义属性-format
- HDU 4751 Divide Groups
- (转载收藏)国内主流的“傻瓜式”建站系统介绍
- 图像分割“Fully Convolutional Networks for Semantic Segmentation”