1.2.5-1.2.6 const关键字和引用

5、const关键字

1.>

C语言中的 const关键字

C语言中const所修饰的变量不是一个常量,是一个常变量或者说是一个只读变量,有自己的存储空间,是有地址的。被修饰的变量不能作为数组的下标。const修饰的变量可以被初始化,但不可直接修改其值,可以通过指针对其值进行修改。

//有自己的存储空间,可以通过指针对其内部的值进行修改。
#include <stdio.h>

int main()
{
    const int a = 10;
    int *p = &a;
    printf("%d\n", a);
    printf("%p\n", p);

    *p = 30;
    printf("%d\n", a);

    return 0;
}

2.>

C++中的const关键字

C++中的const修饰的是一个真正的常量,定义的时候必须初始化,之后被放在常量区。可以做数组的下标。

可能分配存储空间,也可能不分配存储空间。
当const常量为全局,并且需要在其它文件中使用,会分配存储空间。
当使用&操作符,取const常量的地址时,会分配存储空间。
当const int &a = 10; const修饰引用时,也会分配存储空间 。

//使用&操作符,取const常量的地址时
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
    const int a = 10;
    const int* p = &a;

    printf("%p\n", p);

    return 0;
}

//当const int &a = 10; const修饰引用时
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
    const int& a = 10;

    printf("%p\n", &a);			//当使用&操作符,取const常量的地址时,会分配存储空间。

    return 0;
}

3>

const与#define

  • C++中使用const代替#define
    • < #define MAX 100 > //C语言的宏常量
    • const int MAX=100; //C++语言的const常量
  • const与#define的比较
    • const常量有数据类型,而宏常量没有数据类型。
    • 编译器可以对const进行类型安全检查。而对define只进行
      字符替换,没有类型安全检查,并且在字符替换可能会产生
      意料不到的错误。
  • 使用const的另外一个好处是简单情况下进行常量折叠
    在编译时预先计算常量表达式的结果;例如:
    • const int s=3*100+20;使用时直接是结果 320。

6、引用

1、变量可以说是一段内存的引用,意思就是别名;然后引用则是变量的别名。是不会在开辟内存空间的。

int a = 10;
int &b = a;

2、引用的规则

1> 引用没有定义,是一种关系型声明。声明它和原有某一变量(实体)的关系。故而类型与原类型保持一致,且不分配 内存。与被引用的变量有相同的地址。
2> 声明的时候必须初始化,一经声明,不可变更。
3> 可对引用,再次引用。多次引用的结果,是某一变量具有多个别名。
4> &符号前有数据类型时,是引用。其它皆为取地址。

3、引用的用途

引用一般用在1、函数传参和2、返回值上。

#include <iostream>

using namespace std;

int &fun(int &a, int &b)
{
    return a + b;
}

int main()
{
    int a = 10;
    int b = 20;
    
    cout << fun(a, b) << endl;
    
    return 0;
}

当引用作为函数返回值时注意

1> 若返回栈变量:不能成为其它引用的初始值(不能作为左值使用)

2> 若返回静态变量或全局变量:可以成为其他引用的初始值(可作为右值使用,也可作为左值使用)

3> 不能返回局部变量的引用,不能返回局部变量的指针。

4、引用的本质

引用在C++内部实现是一个常指针。

例:int &a <==> int *const a;

5、const 引用

如果既要利用引用提高使用效率,又要保护传递给函数的数据不在函数中被改变,就应当使用常引用。

常引用的声明方式:
const 类型标示符 &引用名 = 目标变量名

常引用可以为其他不同类型的变量起别名,但此时会退化成一个指针

例:

double a = 10.01;
const int &b = a;  //此时b在内存中是有空间的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值