c++引用与指针

c语言指针

    指针虐我千百遍,我代指针如初恋,刚开始学习指针时感到很迷惑,现在看来指针知识充当一个中间人的角色,从内存上看指针空间用来存储数据的地址。

#include<stdio.h>
void  add_1(int num)
{
    num++;
}

void add_2(int *num)
{
    (*num)++;
}
int main()
{
    int number1 = 1,number2 = 1 ; 
    add_1(number1);
    add_2(&number2);
    printf("%d\n",number1);
    printf("%d\n",number2);
    return 0;
}

这里写图片描述

    number1的值保持不变,number2则增加了1,add_1()中传参相当于开辟了一个空间将number1的值复制到了该空间,对复制值所进行的所有操作对原来的数据没有任何影响。而add_2()中传参则是开辟一个空间储存number2地址,对num的所有操作等于对number2的操作。

c++ 引用

    下面的代码和上面的代码几乎一样,修改的仅是几个符号,但效果是一样的。

#include<iostream>
using namespace std;
void add_1(int num)
{
    num++;
}
void add_2(int &num)
{
    num++;
}

int main()
{
    int number1 = 0, number2 = 0;
    add_1(number1);
    add_2(number2);
    cout << number1 << "  " << number2 << endl;
    return 0;
}

这里写图片描述
    c++引用就是将number2取了个别名,实际在内存上存储的还是number2内存地址,只是编译器进行了一些优化和限制,就像我对计算机科学理解的一样,不同的组织方式形成了不同的计算机体系结构。

c++引用作为返回值

#include<iostream>
using namespace std;
int n = 3;
int& func()
{
    return n;
}
int main()
{
    int num;
    num = func();
    cout<<num <<endl;
    return 0;
}

    函数返回的时指向n的隐式指针,但需要被引用的对象不得超过作用域,也就是说看变量是作用于那个函数体内的,像上面全局变量就可以被引用,但如果放在func函数内就不可以了。

c++引用与指针的一些区别

  • 指针可以空指针,但引用必须指向一块合法的地址空间。
  • 指针可以从一个对象指向另一个对象,但引用一旦被初始化对象,则不可更改对象。
  • 指针可以在任何时间进行初始化,但引用必须在创建时初始化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值