空闲时候思考之const

本文深入探讨了C与C++语言中const关键字的使用差异,包括其作为不可改变变量与常量的不同特性,以及在不同场景下的应用实例。重点解释了const在C语言中的内存分配与修改,以及在C++语言中如何存储在符号表中而不分配内存,导致输出结果的差异。此外,文章还详细阐述了const在不同上下文中的用法,如声明、初始化和数组等。

对于多数人来说那些const的用法比如修饰返回值和修饰参数都应该是十分好理解的下来我要讨论


对于C语言中

#include <stdio.h>

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

上边输出100

对于C++中

#include<iostream>
using namespace std;

void main()
{
const int a=10;
int *p =(int*) &a;
*p = 100;
printf("%d\n",a);
}
上边输出10


原因是什么呢,C中为const是一个不能被改变的变量,有内存空间的分配,所以可以在内存中通过地址改变

C++中的const是一个常量,一般是保存在字符表中,不分配内存,只是在方位该变量的时候或者查看变量的地址的时候就会重新分配一个同名变量与const的常量的值相同,所以此时输出的地址是这个新变量的地址,所以通过地址改变的还是这个变量的值,但是输出的时候编译器还是会在符号表里面读取这个常量的值,所以值未改变


const int size;

//c中const默认外部链接这里只是一个声明而已

const int bufsize = 100;
char buf[bufsize];//这在C语言中是非法的,因为c语言中bufsize是一个不能改变的变量
                 //但是这在C++中合法的,因为C++中不为bufsize建立存储空间,只是存储在符号表中
                  
//但是C++中const默认内部连接,如果要在多编译单元中使用必须设置为
extern const int bufsize=100;    //改为外部连接,此时就是强制为const创建空间
extern const int bufsize;//这在c++中只是声明,只能在初始化的时候才分配内存
//在c++中一个const不必建立空间,但是c中const必须建立空间    
 
const int i[] = {1,2,3,4};//集合不能保存到符号表中,所以只能也必须分配内存
float f[i[3]];//编译期间的值是不能使用的,因为编译期间编译器就不知道存储器的内容
struct S
{
    int i;
    int j;
};
const S s[] = {{1,2},{3,4}};

int main()
{

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值