c语言与c++中const的区别
来源:互联网 发布:js document 创建标签 编辑:程序博客网 时间:2024/06/06 01:08
首先声明一下:const的不同是由于编译器对const的处理方法不同造成的。因此,我们所接下来所说的差异是分别针对c89和c++99版本的编译器。
1、 c语言中的const
#include<stdio.h>
void main()
{
const int a = 10;
//int arr[a] = { 0 }; 不能用a作为数组下标
//a = 20; //不能进行直接修改
printf("修改前a=%d\n", a);
int *p = &a;
*p = 20;
printf("修改后a=%d\n",a);
}
可以看出,在c语言中,const 修饰的变量是常变量,它的性质还是属于变量,只不过是具有常性的变量,也就是说:(1)它不能通过直接作为左值的方式来进行修改;
(2)在编译过程中,与变量一样的方式处理;
(3)它还是属于变量,因此不能作为数组的下标;
(4)虽然不能直接直接修改a的值,但是可以通过获取a的地址来间接修改。
2、 c++中的const
#include<iostream>
using namespace std;
int main()
{
const int a = 10;
//const int b; 必须初始化
int arr[a] = { 0 };
//a = 20;
cout << "修改前a=" << a << endl;
int *p = (int*)&a;
*p = 20;
cout << "修改后a=" << a << endl;
return 0;
}
可以看出,在c++中,const 修饰的变量是常量,它也就具有常量的性质。那么:
(1)它不能通过直接作为左值的方式来进行修改;
(2)它可以作为数组下标使用;
(3)它必须被初始化;
(4)在编译过程中,所有使用a的地方会被替代成10;(c++编译器对const常量的处理当碰到常量声明时,在符号表中放入常量;编译过程中若发现使用常量则直接以符号表中的值替换)
但是有时它也会退化为常变量,比如:
int c=10;
const int a=c;//当被初始化为变量时
注意:如何解释取地址?
编译过程中若发现对const使用了extern或者&操作符,则会对应的常量分配存储空间(为了兼容c)。c++编译器虽然可能为const常量分配空间(进行&运算时),但是不会使用其存储空间中的值。
结论:
C语言中const常(变)量:其是只读变量,有自己的储空间,能通过地址间接修改其的值。
C++中的const常量:其是放在符号表中,可能分配存储空间,也可能不分配存储空间 ,使用&符号时候才分配一个临时内存空间。
- C语言的const与C++const的区别
- C语言与C++中static,const 关键字的区别
- c++中const与c语言当中的区别zz
- C语言中const与define的区别
- c语言与c++中const的区别
- C语言 #define 与 const的区别
- c++与c语言的区别:const
- 【C语言】C语言的const与C++的const区别
- c语言const与c++的const
- c语言const关键字与宏的区别
- c++中const、内联函数与c语言中的宏定义的区别
- C语言中auto,register,static,const,volatile的区别
- C语言中auto,register,static,const,volatile的区别
- C语言中auto,register,static,const,volatile的区别
- c语言中restrict和const的区别
- C语言中auto,register,static,const,volatile的区别
- C语言中auto,register,static,const,volatile的区别
- C语言中auto,register,static,const,volatile的区别
- PAT乙级1002
- Java RESTful Web(JAX-RS)
- shadow 端口被占用解决方法
- 返回两个求和等于给定值的数组下标--算法练习
- 类抢红包方案
- c语言与c++中const的区别
- 南阳理工_66分数拆分
- 个人作业 2017.10.20
- np.array 添加维度
- 多条目加载
- HTML route 登录+游戏+修改密码
- 使用过滤器对所有请求进行字符编码过滤
- Python numpy.random中的shuffle和permutation函数的区别
- Lavarel 5.5安装步骤整理