关键字const在C和C++的应用

当我们在用C/C++写代码时,想让某个变量为常量,将变量定义时添加const关键字修改即可。关键字const的应用如下:
1.const修饰变量

const type name = value;
//等价于如下,const放在数据类型的前后均可。
type const name = value;
//示例
const int num = 100; //表示num为一个不可改变的常量
num = 90;//重写给num赋值,将会发生编译错误,原因是const修饰的变量是不可以再修改其值。

从上面可以看出,常量必须在定义的同时赋值(初始化),后面的任何赋值行为都将引发错误。

2.const与指针
const 也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据。
const 离变量名近就是用来修饰指针变量的,离变量名远就是用来修饰指针指向的数据,如果近的和远的都有,那么就同时修饰指针变量以及它指向的数据。

const int *p1; //指针所指向的数据是只读的,也就是 p1、p2 本身的值可以修改(指向不同的数据),但它们指向的数据不能被修改。
int const *p2; //与上一行的定义等价
int * const p3; //指针是只读的,也就是 p3 本身的值不能被修改

const int * const p4; //指针本身和它指向的数据都有可能是只读的
int const * const p5; //等价上一行。

3.const 和函数形参
const 通常用在函数形参中,如果形参是一个指针,为了防止在函数内部修改指针指向的数据,就可以用 const 来限制。

4.const 和非 const 类型转换
const char *和char *是不同的类型,不能将const char *类型的数据赋值给char *类型的变量。但反过来是可以的,编译器允许将char *类型的数据赋值给const char *类型的变量。

5.C和C++中的const区别

const int m = 10;
int n = m;

(1)数据取值的原理不同
在C语言中,编译器会先到 m 所在的内存取出一份数据,再将这份数据赋给 n;而在C++中,编译器会直接将 10 赋给 n,没有读取内存的过程,和int n = 10;的效果一样。C++ 中的常量更类似于#define命令,是一个值替换的过程,只不过#define是在预处理阶段替换,而常量是在编译阶段替换。
C++ 对 const 的处理少了读取内存的过程,优点是提高了程序执行效率,缺点是不能反映内存的变化,一旦 const 变量被修改,C++ 就不能取得最新的值。

#include <stdio.h>
int main(){
    const int n = 10;
    int *p = (int*)&n;  //必须强制类型转换
    *p = 99;  //修改const变量的值
    printf("%d\n", n);
    return 0;
}

C打印的结果是99,而C++则是10;原因是C++不会从内存中读数。

(2)作用域不同
C和C++中全局 const 变量的作用域相同,都是当前文件。
不同的是它们的可见范围:
C语言中 const 全局变量的可见范围是整个程序,在其他文件中使用 extern 声明后就可以使用;
而C++中 const 全局变量的可见范围仅限于当前文件,在其他文件中不可见,所以它可以定义在头文件中,多次引入后也不会出错。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值