const在C和C++中的区别

news2024/5/18 17:38:59

昨天有个学生去做C/C++软件工程师的笔试题,遇到了这么一个题目,来问我结果是多少?

在这里插入图片描述
看似非常普通的一道C语言题目,如果不指定编译器,还真不知道结果是多少。

不信我来演示给你看下。

首先是用gcc来编译,就是C语言的编译器,语法没有问题,运行结果,num = 2。

root@Turbo:test# gcc test.c -o test
root@Turbo:test# ./test 
num = 2
root@Turbo:test#

同样的代码,换成g++来编译,就是C++的编译器,结果是num = 1。

root@Turbo:test# g++ test.c -o test
root@Turbo:test# ./test 
num = 1
root@Turbo:test#

都说C++是兼容C语言的,为什么在处理结果上却不同。

其实说兼容当然是没问题的,只是C语言和C++中const的作用不同。

C语言中,const修饰的是只读变量,意思是不能通过变量本身去修改对应内存的值,但是可以通过其他方式去修改,比如指针。代码中确实也是通过指针来修改的,所以num对应的那块内存值变了。

但是在C++中,const修饰的就是一个常量,跟define定义的宏有点类似,它存放在符号表中,接下来只要遇到这个常量,直接就是替换。

那么问题就来了,既然它没有存放在内存中,为什么代码中还能对他进行取地址的操作。

这一点主要还是为了兼容C语言,强行对它取地址,编译器会分配一块内存,并且把常量的值填在内存里面,然后取这块内存的地址进行运算。但是整个过程并不会影响常量的属性,代码下面遇到,还是直接替换。

const在C++中还有很多用处,修饰成员变量、修饰成员函数,所以学完了C语言,如果有精力,可以去看看C++,不为别的,学习C++可以更好的理解C语言。

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

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

相关文章

Linux系统安全:安全技术和防火墙

目录 一、安全技术 1、安全技术 2、防火墙分类 二、防火墙 1、iptables五表五链 2、黑白名单 3、iptables基本语法 4、iptables选项 5、控制类型 6、隐藏扩展模块 7、显示扩展模块 8、iptables规则保存 9、自定义链使用 一、安全技术 1、安全技术 ①入侵检测系统…

Node.js http 模块详解(1)

http 模块 使用 Node.js 中创建 Web 服务,主要依赖内置的 http 模块。经典的 express.js、koa.js 框架都是以 http 模块为核心,进行的不同程度的封装。 创建一个最简单的 Web 服务只需要几行代码。新建一个 index.js 文件,输入以下内容&…

【GCC】3: webrtc带宽(预估调整)和GCC模块

webrtc源码分析(8)-拥塞控制(上)-码率预估 bandwidth bitrate estimator 整体码控流程 webrtc源码分析(8)-拥塞控制(上)-码率预估 大神绘制的: TWCC TCC算法的流程 TccEstimator 大神用go写的:Transport-CC Algorithm Description This is a Goog

python小游戏——打砖块代码开源

♥️作者:小刘在这里 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿所有的美好&#…

Redis单线程还快的原因

Redis单线程还快的原因 Redis Server是多线程的,Redis单线程指的是请求处理整个流程是单线程的! 单线程还快的原因 纯内存操作: Redis数据存储在内存中,速度很快。 非阻塞IO多路复用机制: Redis 采用了多路复用机制&a…

从事互联网行业,考一个PMP会有帮助吗?

PMP是项目管理类证书,不要求工作岗位,只要涉及项目、项目管理岗位,就可以考PMP证书,就会有帮助。但这里先说一下PMP的报名条件,先看能不能考,再说考了是否有帮助。 条件如下图,有两个&#xff…

睿智的目标检测64——目标检测中的MixUp数据增强方法

睿智的目标检测64——目标检测中的MixUp数据增强方法学习前言代码下载什么是MixUp数据增强方法实现思路全部代码1、数据增强与MixUp2、调用代码学习前言 哈哈哈!我再来一次数据增强! 代码下载 https://github.com/bubbliiiing/object-detection-augm…

HTML5+CSS3(八)-全面详解(学习总结---从入门到深化)

领取详细资料 请关注一下公众号 !!! 目录 领取详细资料 请关注一下公众号 !!! 关系选择器 关系选择器分类 后代选择器 定义 语法 子代选择器 定义 语法 相邻兄弟选择器 定义 语法 通用兄弟选择…

Python爬虫教你爬取视频信息

大家好,我是拉斯,今天分享一个爬取某音视频的一个小案例,大家一起学习 目录前言基本环境配置爬取目标视频获取视频链接1.查看网页源代码2.抓包工具捕捉下载视频(以mp4格式进行保存)获取其他信息并打印(作者名,作品名,…

沁恒CH32V307使用记录:GPIO与EXTI

文章目录目的GPIO(通用输入输出接口)基础说明初始化输出输入与电平读取锁定机制EXTI(外部中断)基础说明使用演示总结目的 GPIO是单片机最基础的功能,EXTI最常用的场景就是GPIO用于输入时使用。这篇文章将对CH32V307中…

【i18n】使用 vue-i18n 实现国际化多语言切换

学习关键语句: i18n 进行多语言国际化 使用 vue-i18n 语言切换 写在前面 由于以前没有过国际化的经验 , 所以第一次遇到的时候还是有点懵逼的 , 赶紧在网上转了一大圈 , 分享给大家一点点我的使用经验 我写这篇文章的目的是大家看了之后跟着步骤走就能完成多语言切换的任务 …

闭眼时长标准差脚本

闭眼时长标准差脚本 闭眼时长标准差 平均闭眼时长:识别一分钟内闭眼次数以及每次闭眼的时长,将每次闭眼的时长进行累计相加,最终再取平均值 闭眼标准差公式 闭眼标准差((n1−navg)2(n2−navg)2...)∗1/n闭眼标准差\sqrt{((n_1-n_{avg})^2(…

【广度优先搜索】N叉树的层序遍历 | 腐烂的橘子 | 单词接龙 | 最小基因变化 | 打开转盘锁

🌠作者:阿亮joy. 🎆专栏:《数据结构与算法要啸着学》 🎇座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉…

jenkins打包构建springboot项目为docker镜像并上传nexus私服

前提:jenkins,docker,nexus都已经搭建完毕 一. 开启docker远程访问 1.修改docker.service文件 Docker 安装成功之后,首先需要修改 Docker 配置来开启允许远程访问 Docker 的功能。     文件位置:/lib/systemd/system/docker.service    …

JVM(Java虚拟机)详解(JVM 内存模型、堆、GC、直接内存、性能调优)

JVM(Java虚拟机) JVM 内存模型 结构图 jdk1.8 结构图(极简) jdk1.8 结构图(简单) JVM(Java虚拟机): 是一个抽象的计算模型。如同一台真实的机器,它有自己…

使用比console.log更优质的前端调试方案

程序调试是程序开发必不可少的一环,刚开始接触前端调试时,最常用的就是 console.log 打印变量进行调试,本文会分享一些笔者学习到的前端调试方法,减少对 console.log 调试方式的依赖,选择更优质的前端调试方案。 本文中…

Android开发进阶——RxJava核心架构分析

简介 RxJava是对响应式扩展( Reactive Extensions,称之为 ReactiveX )规范的Java 实现,该规范还有其他语言实现:RxJS、Rx.Net、RxScala、RxSwift等等(也即,ReactiveX 定义了规范,其他…

pip安装时报错 ascii‘ codec can‘t decode byte 0xe2 in position...

在使用pip安装包的时候报错ascii’ codec can’t decode byte 0xe2 in position… 报错信息 UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe2 in position 1429: ordinal not in range(128) 以前好像见过类似的情况,所以搜了一下怎么修改python默认…

聊聊ChatGPT

最近ChatGPT火出圈。 在过去三个月里,眼见着它的热度火箭一般蹿升,据瑞银上周三发布的报告显示,GPT已经超过了Tiktok,成为人类有史以来最快突破1亿月活跃用户的互联网产品。Tiktok当初用了9个月,而GPT只用了2个月。 …

Spring使用了哪些设计模式?

目录Spring中涉及的设计模式总结1.简单工厂(非23种设计模式中的一种)2.工厂方法3.单例模式4.适配器模式5.装饰器模式6.代理模式7.观察者模式8.策略模式9.模版方法模式Spring中涉及的设计模式总结 1.简单工厂(非23种设计模式中的一种) 实现方式: BeanFactory。Spri…