c++学习——c与c++const修饰的变量的区别

news2024/11/22 14:19:40

c语言下const修饰的变量

1、c语言下const修饰的变量都有空间
2. c语言的const修饰的全局变量具有外部链接属性
在这里插入图片描述

07 const修饰的变量.c

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

const int a = 10;//常量区,一旦初始化,不能修改

void test()
{
	//a = 100; //全局的const不能直接修改
	int *p = (int*)&a;//const int 不是  int
	*p = 100;//全局的const不能间接修改
	printf("%d\n", a);
}

int main()
{
	const int b = 20;
	//b = 200;//局部的const修饰的变量不能直接修改
	int *p = (int *)&b;
	*p = 200;
	printf("%d\n",b);

	//使用别的文件的全局const修饰的变量需要声明
	extern const int c;
	printf("c=%d\n",c);
	system("pause");
	return EXIT_SUCCESS;
}

c_test.c

const int c = 20;

在这里插入图片描述
这里也就验证了****2. c语言的const修饰的全局变量具有外部链接属性

c++下const修饰的变量

这里是修改不了bb的值,是由于在编译器编译的阶段对我们写的代码进行了优化
如图所示

在这里插入图片描述
要想修改bb的值,就要加入一个关键字volatile
在这里插入图片描述
这里地址1是因为不进行优化,返回的是一个bool类型,真的就是1,假的就是0

在这里插入图片描述
c++语言的const修饰的变量有时有空间,有时没有空间(发生常量折叠,且没有对变量进行取址操作)
07 const修饰的变量.cpp

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

const int aa = 10;//c++下没有内存

void test01()
{
	//发生了常量折叠
	cout << "aa=" << aa << endl;//在编译阶段,编译器:cout<<"aa="<<10<<endl;
	//禁止优化关键字 volatile
	volatile const int bb = 20;//栈区
	int *p = (int *)&bb;//进行了取地址操作,所以有空间
	*p = 200;
	cout << "bb=" << bb << endl;//在编译阶段,cout << "bb=" << 20 << endl;
	cout << "*p=" << *p << endl;//200
	cout << "bb的地址为" << (int)&bb << endl;
	cout << "p的地址为" << (int)p << endl;
}

int main()
{
	test01();
	//c++修饰的全局变量具有内部链接属性
	//extern const int c;
	//cout << "c=" << c << endl;
	system("pause");
	return EXIT_SUCCESS;
}

c++_const.cpp

//const int c = 30;  内部链接属性

extern const int c = 30;//c++下加上extern就是外部链接属性

在这里插入图片描述

c++编译器不能优化的情况

1.不能优化自定义数据类型
2.如果用变量给const修饰的局部变量赋值,那么编译器就不能优化

3.编译器是在编译阶段来优化数据

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

void test01()
{
	int a = 10;
	const int b = 20;//如果用变量给const修饰二点变量赋值,那么编译器不会优化
	int *p = (int *)&b;
	*p = 100;
	cout << "b=" << b << endl;
	cout << "*p=" << *p << endl;
}

void test02()
{
	int a = 10;
	const int b = a;
	int *p = (int *)&b;
	*p = 100;
	cout << "b=" << b << endl;
	cout << "*p=" << *p << endl;
}

int main()
{
	test01();
	cout << "-------------------" << endl;
	test02();
	system("pause");
	return EXIT_SUCCESS;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/550243.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1. Linux环境搭建及问题解决方案

本文介绍了Linux环境搭建的过程以及遇到的问题和解决方案&#xff0c;并且介绍了常用的Linux命令. 一、Linux环境搭建 整体所需的环节 安装VMware安装Linux &#xff08;这边我选的是Server版本&#xff09;安装配置Samba&#xff08;Samba是一种Linux和Windows之间进行文件共…

二层环路详解:交换机环路产生的过程和原因

前言&#xff1a; 在了解环路之前得先了解交换机的工作原理&#xff0c;当然交换机的基本工作原理其实非常简单&#xff0c;只有“单播转发与泛洪转发”、“交换机MAC地址表”这两个&#xff01;其他的如vlan&#xff0c;生成树等也是在此基础上增加的&#xff0c;弥补交换机基…

初始Linux的基本操作

上篇博客中&#xff0c;我介绍了关于Linux的相关概念&#xff0c;让我们初步的了解到Linux的重要性&#xff0c;在这篇博客中我会再讲一些Linux操作系统的理解。 一.操作系统 我们知道Linux是一个操作系统&#xff0c;而操作系统操作系统(英语&#xff1a;Operating System&…

[深度好文]10张图带你轻松理解关系型数据库系统的工作原理

[深度好文]10张图带你轻松理解关系型数据库系统的工作原理 原文(欢迎关注)&#xff1a;https://mp.weixin.qq.com/s/CNCfWRpv8QlICGvZkLG4Jw 尽管数据库在我们应用程序中扮演着储存几乎所有状态的关键角色&#xff0c;但人们对其运行原理的了解通常仅停留在较为浅显的层面&…

跟我一起使用 compose 做一个跨平台的黑白棋游戏(4)移植到compose-jb实现跨平台

前言 在上一篇文章中&#xff0c;我们已经实现了游戏的所有界面和逻辑代码&#xff0c;并且在 Android 上已经可以正常运行。 这篇文章我们将讲解如何将其从使用 jetpack compose 修改为使用 compose-jb 从而实现跨平台。 老规矩&#xff0c;先看效果图&#xff1a; 可以看到…

063:cesium设置带边界线材质(material-7)

第063个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置带边界折线材质,请参考源代码,了解PolylineOutlineMaterialProperty的应用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共89行)相关API参考…

Python-matplotlib中的pie(饼)图

Python-matplotlib中的pie&#xff08;饼&#xff09;图 %matplotlib inline import matplotlib.pyplot as pltm 51212 f 40742 m_perc m/(mf) f_perc f/(mf)colors [navy,lightcoral] labels ["Male","Female"]plt.figure(figsize(8,8)) paches,te…

为什么不胜任的人,反而获得晋升?

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID&#xff1a;jishulingdaoli) 也许你有过这样的经历&#xff0c;自己勤勤恳恳地干活&#xff0c;每个月却只拿着微薄的薪水&#xff0c;有些人明明无法胜任工作&#xff0c;却像坐了火箭一样飞速晋升。这种现象在现实生活中无处不在…

3699元还配同价位最好屏幕!Redmi Book 14评测:几乎完美的“水桶”轻薄本

一、前言&#xff1a;4K价位最好屏幕 不久前&#xff0c;有网友让我推荐一台4000元价位的轻薄本&#xff0c;笔者直接选了一台搭载i5-13500H处理器且价格仅售4299元的某一线品牌产品。 但是&#xff0c;事后才发现不对&#xff0c;因为这款极具性价比的笔记本竟然用了45%NTSC色…

MIT6.824 lecture5上课笔记(涉及到Lab2A)- Go threads and raft

总结&#xff1a;本节课讲解了一些会在lab2中使用到的go的多线程技巧&#xff0c;会给一些简单的demo&#xff0c;lab2中可能会借鉴这些demo。 详细的Lab2 raft算法实现源码&#xff0c;请参考我的个人仓库&#xff08;记得点颗星星&#xff09;, 配合readme食用更佳。 MIT6.…

ChatGPT 使用 拓展资料:如何善用大语言模型的推理能力?

ChatGPT 使用 拓展资料:如何善用大语言模型的推理能力?

ChatGPT Plus 会员续费扣款失败如何处理

扣款失败 笔者由于开通 ChatGPT Plus 会员比较早&#xff0c;3月26日一个月就到期了&#xff0c;但是最近几天注意到&#xff0c;虚拟卡上也没有提醒我扣费&#xff0c;还是能继续使用 GPT-4.0&#xff0c;就很奇怪&#xff0c;于是就研究了一番。 PS: 如果有小伙伴还不会开通 …

python 文件操作 , 异常处理 , 模块和包

文件操作 1.写数据 # open(name, mode) # name&#xff1a;是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。 # mode&#xff1a;设置打开文件的模式(访问模式)&#xff1a;只读、写入、追加等。 #1.打开文件---通道建立--申请资源 # w 模式会清空之前的内…

【三维激光扫描】实验04:SiScan基于点云的量测功能

SiScan软件提供的基于点云的量测功能有:两点距离量测、多点距离量测、点到面距离量测、高度量测、坡度量测、角度量测、投影面积量测等等。 文章目录 一、两点距离量测二、多点距离量测三、点到面距离量测四、高度量测五、坡度量测六、角度量测七、投影面积量测一、两点距离量…

分布式与并行计算—并向算法实现

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 原始串行快速排序算法中有“分而治之”的递归调用部分&#xff0c;在每次选择pivoit并把序列按照小于pivoIt和大于pivoit分成两类后&#xff0c;左右两部分的递归排序可以并发执行。 运行时间 为了减小偶然性因素造成的时间差…

postgresql|数据库|插件学习(一)---postgresql-12的内置插件pg_stat_statements的启用和使用

前言&#xff1a; 插件就是原软件的扩展功能。postgresql有非常多的各种各样的插件&#xff0c;当然了&#xff0c;插件不安装对于我们使用数据库并没有什么太多的影响&#xff0c;可能只是不舒服一些而已&#xff0c;但有一些插件我们如果有安装&#xff0c;那么&#xff0c;对…

【NMI 2021】从生物学角度看进化计算(6个生物进化特征)

A biological perspective on evolutionary computation “生物学视角下的进化计算”&#xff0c;总结了进化算法——通过对比模拟和真实的进化&#xff0c;指出当前进化算法与生物进化存在的六点差异&#xff0c;并指出了对应的改进方案。 何为进化算法&#xff1f; 将任意问…

第二部分——长难句——第二章——复合句——第二节——状语从句

最后一类了哦 一&#xff0c;状语从句的概述 &#xff08;一&#xff09;状语从句的含义 一个句子作状语表达描述性的信息 一个主句可以组合好几个状语从句&#xff0c;因为可以表述不同方面的信息。 &#xff08;二&#xff09;状语从句的写法 状语从句的连接词叫做从属连…

Java--内部类学习笔记

本文介绍了什么是内部类,Java中的内部类:实例内部类. 静态内部类.局部内部类.匿名内部类的语法和注意事项,以及每个内部类的运用场景,以及简单介绍了匿名内部类更简洁更特殊的语法->lambda表达式 Java内部类学习笔记 一.什么是内部类?二. 内部类的分类1.实例内部类2.静态内…