指针与引用
来源:互联网 发布:vlc 看网络电视 编辑:程序博客网 时间:2024/05/15 17:32
一、指针的概念
指针一般指向一个函数或一个变量。在计算机语言中,由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元,因此将地址形象化的称为“指针”。
二、引用的概念
引用是c++对c的一个扩充,变量的引用就是变量的别用,因此引用又称为别名。
由此可以看出指针是变量的地址,而引用指的是变量本身.
三、引用的用法
声明一个引用的格式:类型 &引用名=已定义的变量名
例如:int i=5;
int &j=i;
j是一个整型变量的引用,用整型变量i对其初始化,即j是i的别名。
j和i的作用相同,代表同一个变量。由上图可已看出j和i指的是同一块空间。
注意:上述中“&”是引用声明符,此时并不代表地址。
引用的特点:
1.一个变量可以有多个引用;//例如一个人可以有多个小名
2.引用不是一种独立的数据类型,它必须与某一种类型的变量相联系。在声明时,必须对它进行初始化;
3.引用只能在初始化的时候使用一次,不能再作为其他变量的引用
const引用:
在c语言中const所修饰的变量,称之为“常变量”,之所以成为“常变量”,是因为其值可以被修改;
可以看出i虽然被const修饰,但它的值仍可改变。
但在c++中,const 所修饰的变量,称之为“常量”;
例如:
int d1=4;
const int &d2=d1;
d1=5;//d1改变d2的值也会改变,
将上述语句改为: d2=5 时则会出现即d2为常量。
const int d3=1;
const int & d4=d3;
int & d5=d3;//此时会出现错误,
const int & d6=5;//d6为常量具有常属性,只有常引用可以引用常量;
若:int & d6=5;会出现
引用作为参数:
在c 语言中参数的传递可分为:
1)值传递:形参是实参的一份临时拷贝,改变形参并不能改变实参的值;
#includeusing namespace std;void swap(int *m,int *n){ int tmp=*m; *m=*n; *n=tmp;}int main(){ int a=1,b=2; cout<<"a="<
2)址传递;形参和实参指的是同一块空间,改变形参即改变实参;
#includeusing namespace std;void swap(int *m,int *n){ int tmp=*m; *m=*n; *n=tmp;}int main(){ int a=1,b=2; cout<<"a="<
在c++中,引用也可作为函数参数。这时,实参传给形参的是实参变量的地址,即“传值调用”,实参和形参占用同一个存储单元,
引用传参:
#includeusing namespace std;void swap(int &m,int &n){ int tmp=m; m=n; n=tmp;}int main(){ int a=1,b=2; cout<<"a="<
引用的进一步说明:
1)不允许建立void类型的引用;
例如:void &a=10;
2)不能建立引用的数组;
例如: char a[5]="abcd";
char &c[5]=a;//错误
3)不能建立引用的引用;
例如:int n=3;
int &&r=n;//错误
4)可以将引用的地址赋给一个指针,此时指针指向的是原来的变量;
四、引用和指针的区别和联系
1.引用只能在初始化时定义一次,之后不能改变,使其指向其他变量;指针变量的值可以改变;
2.引用必须指向一个有效变量,指针可以为空;
3.sizeof引用对象和指针对象的意义不一样。sizeof指针是对象地址的大小(在32位平台上大小为4个字节),sizeof引用得到的是所指向变量的大小;
4.引用和指针自增,自减意义不一样;
5.相对而言,引用比较安全,引用不存在访问非法空间的问题,
6.指针比引用更加灵活。
- 指针:指针与引用
- 指针与指针的引用
- 指针与指针的引用
- 指针与指针的引用-
- 指针与指针的引用
- 指针与二维指针、引用
- 指针与引用
- 指针与引用
- 关于引用与指针
- 指针与引用
- 引用与指针.C++
- 引用与指针
- 指针与引用
- const指针与引用
- Item1 指针与引用
- 指针与引用
- 指针与引用
- 指针与引用区别
- 使用git 配置多仓库后再次推送return error:500的问题
- 耿耿不寐·如有隐忧
- iOS 全局竖屏 单个viewcontroller点击按钮支持横屏
- java项目上线过程
- Android仿掌上英雄联盟首页,实现折叠效果
- 指针与引用
- Shell 自定义变量
- centos 7 安装FastDFS 5.09
- Android学习日记——INTENT
- sshfs fuser 用户组的创建和用户添加
- python函数汇总:eval(str)
- shell技巧——快速查找命令history的hh命令
- Python Excel相关
- 前端框架DataTables的使用,后台接java