指针与引用的区别与联系

指针式c系语言的特色。指针是C++提供的一种颇具特色的数据类型,允许直接获取和操纵数据地址,实现动态储存分配。一个数据对象的内存地址称为该数据对象的指针。指针可以表示各种数据对象,如简单的变量、数组、数组元素、结构体,甚至函数。

指针与引用的区别:

    1、引用必须在声明前初始化,并且只能初始化一次,之后就不能改变了,而指针不用,并且可以改变。

    2、初始化时引用必须指明一个对象,而指针的初始化是指向一个地址,可以为空。

    3、引用一旦声明,引用的对象不能改变,而指针随时可以改变指向的对象。

    5、指针是一个实体,而引用仅是个别名。

    6、引用没有const,指针可以有const,const的指针不可变。

指针与引用的联系:

     1、指针和引用都是通过地址实现的,可以说引用是指针的特殊一种

我们来看下面的例子:

int main(){

     int a1;                             //正确, 很正常的声明了一个整形变量

     int a2 = 10;                   //正确,很正常的声明了一个整形变量,同时初始化这个变量。

     int a3 = 20;                   //正确,很正常的声明了一个整形变量,同时初始化这个变量。

     int &b1;                         //错误,声明了一个引用,但引用不能为空,必须同时初始化。

     int &b2 = a1;               //正确,声明了一个引用b2,同时初始化了,b2为a1的别名。

     int &b3 = a1;               //正确,声明了一个引用b3,同时初始化了,b3为a1的别名。

     int *p;                            //正确,声明了一个整数指针,但是并没有定义这个指针所指向的地址。

     int *p = 5;                     //错误,整数指针p并没有指向实际的地址,在这种情况下就给他赋值是错误的,因为赋的值不知道放到哪里去,这样的指针称为野指针,会造成内存泄露。

     p =  &a3;                      //正确,整数指针p指向a1实际的地址。

     const double c;           //错误,const常量赋值时,必须同时初始化。

     const double d = 10.0; //正确,const常量赋值并同时初始化。

     const double e = 11.0; //

     const double *q = &e;  //正确,const常量指针赋值并同时初始化。

     return o;

}

引用:int a = 10;

           int &b = a ;

           我们就说b是a的引用,也就是b是a的别名,b改变,a就自动改变。

在c++语言的函数的传参和返回值的传递方式有三种:值传递、指针(地址)传递、引用传递。

下面看三个例子:

例1、

void fun1(int p){

      p = p + 1;

}

void main(){

int a = 10;

fun1(a);

printf("%d\n",a);

}

输出的结果为10,此例子采用的值传递,调用函数后a所在地址的值并没有改变,所以a值没有变。

例2、

void fun1(int *p){

      *p = *p + 1;

}

void main(){

int a = 10;

fun1(&a);

printf("%d\n",a);

}

输出的结果为11;此例子采用的指针(地址)传递,调用函数后a所在地址的值发生改变,所以a的值也会变化。

例3、

void fun1(int &p){

      p = p + 1;

}

void main(){

int a = 10;

fun1(a);

printf("%d\n",a);

}

输出的结果为11;此例子采用的引用传递,调用函数后,p相当于a的别名,当p改变后a的值也会跟着改变,所以a的值也会变化。


 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值