指针与引用

来源:互联网 发布: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.不要返回一个临时变量的引用

2.如果返回对象出了当前函数的作用域依然存在,尽量使用引用返回,可提高效率。

引用的进一步说明:

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.指针比引用更加灵活。






原创粉丝点击