c语言和c++的const的区别

const

C++中的const:

1.const修饰的局部变量赋值常量时,局部变量保存在符号表中,修改不了,是一个常量

2.const修饰的全局变量保存在常量区,不能被修改

3.const修饰的全局变量默认是内部链接属性,加上extern就变成外部链接属性。

const单词字面意思为常数,不变的,它是C/C++中的一个关键字,是一个限定符,它用来限定一个变量不允许改变,它将一个对象转换成一个常量

const int a = 10;

a = 100;//编译错误const限定一个变量不允许改变

C语言中的const:

1.const修饰的局部变量,存在栈区,虽然不能通过const修饰的变量区修改栈区的内容,但是可以通过地址区修改。

2.const修饰的全局变量是保存在常量区,不能通过变量名区修改,也不能通过地址去修改

3.const修饰的全局变量,如果想在其他文件使用,则可直接extern声明外部可用即可

#include<stdio.h>

void test03()

{

extern const int num;//声明是外部可用的

printf("num = %d\n",num);

}

const int b = 10;//const修饰的全局变量保存在常量区

//const修饰的全局变量

void test02() {

int *p = &b;

*p = 100;//错误的,不能修改常量区的内容

printf("%d\n", b);

}

//const修饰的局部变量

void test01() {

//在C语言中const修饰的变量保存在栈区

const int a = 10;

//a = 100;

int *p = &a;

*p = 100;

printf("%d\n", a);

}

int main()

{

test01();

test02();

test03();

return 0;

}

C++中的const:

#include<iostream>

using namespace std;

//const修饰的全局变量

void test03()

{

extern const int num;

cout << num << endl;

}

const int b = 1;

void test02()

{

//const修饰的全局变量存在常量区

//b = 100;

int *p = (int *)&b;

*p = 100;//错误的

cout << b << endl;

}

void test01()

{

//C++中的const修饰的局部变量

const int a = 10;

//a = 100;

int *p = (int *)&a;

//C++中的const修饰的局部变量保存在了符号表中

//当对const修饰的局部变量取地址是,编译会产生一个临时变量来保存a的地址

*p = 100;

cout << a << endl;

}

int main()

{

test03();

return 0;

}

extern const int num = 1;//const修饰的全局变量默认修饰的是内部链接属性,加上extern就可以变成外部链接属性。

相关推荐
vibecoding日记18 小时前
双非如何快速入职字节等大厂大模型?真实案例分析:推理优化和投机解码
算法·求职·大模型工程师
yszaygr213820 小时前
Verilog参数化游程编码RLE模块
算法
望易20 小时前
刚设计的大模型架构-双域耦合认知框架
算法·架构
复杂网络1 天前
多个 Claude Code 与多个 Codex 协同工作:设计与实现方案
算法
apocelipes2 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
HjhIron2 天前
面试常客:字符串算法从入门到进阶
算法·面试
吴佳浩2 天前
DeepSeek DSpark:Confidence-Scheduled Speculative Decoding 技术解析
人工智能·算法·deepseek
触底反弹2 天前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法
vivo互联网技术2 天前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc