const修饰的究竟是常量还是变量?

简介: const修饰的究竟是常量还是变量?

一. const是什么

       const在c语言中是关键字,是constant的简写,用来定义常量,它限定一个变量不允许被改变,产生静态作用。被const修饰的变量,我们称之为常变量,那有一个问题经常就会困扰初学者,常变量究竟是常量呢还是变量?

二. 验证方法

   以下笔者使用VS2022进行验证常变量的本质。我们知道在定义数组的时候需要申明数组的大小,并且需要使用常量来申明。

int main()
{
  int arr1[10] = {0};//数组在定义时,应申明大小,并且应是常量,如这里的10
  return 0;
}

如果在申明的时候使用的是变量,那么编译器就会报错

int main()
{
  int n = 10;
  int arr2[n] = { 0 };//这里的申明是错误的,编译器会报错应该使用常量表达式
  return 0;
}

如图所示

三. 验证const的本质

知道了以上的原理,那我们就可以开始测试

int main()
{
  const int n = 10;
  int arr3[n] = { 0 };//这里仍然会报错
  return 0;
}

       因此,const修饰的常变量本质上还是变量,只不过是被赋予了常量不可改变的属性

四. 例外

       但是,值得一提的是,这样的语法只是在c语言里适用,如果换成c++,则会发现不一样的现象,我们新建一个cpp文件

int main()
{
  const int n = 10;
  int arr4[n] = { 0 };//此时在c++的语言环境下并不会报错
  return 0;
}

我们可以发现,编译器并不会有任何的警告,程序完全能正常运行

        在c++里,被const修饰的变量是直接被当成常量来使用的,因此使用常变量来申明数组的定义,并不会有任何的报错

目录
相关文章
|
传感器 存储
STM32--TIM定时器(3)
STM32--TIM定时器(3)
915 0
STM32--TIM定时器(3)
|
小程序
微信公众号如何添加插入附件文档,如:word、excel、pdf、zip等文件
在做微信公众号运营时,经常会遇到一个问题,就是发布一些推文时,需要附带附件文档以方法用户下载,Word、Excel、PPT、PDF、TXT、zip、rar、wps等格,打开"快传文档"官网(kuaidoc.cn),或者微信小程序端上传文件,生成可插入公众号推文里的文档链接
1539 0
|
弹性计算 Linux 数据安全/隐私保护
幻兽帕鲁palworld自建游戏联机服务器,使用阿里云价格真优惠!
阿里云提供幻兽帕鲁(Palworld)游戏服务器搭建服务,支持4核16G(8人在线)和8核32G(20人在线)两种配置,带宽10M,价格低至70元/月起。通过阿里云计算巢服务,可实现一键购买与自动部署,简单快捷。玩家只需在本地安装STEAM客户端并登录游戏,输入服务器IP及端口8211即可联机游玩。教程详细涵盖服务器选择、配置设置及游戏接入全流程,助你轻松开启帕鲁冒险之旅!
[HDCTF2019]Maze(初识逆向)
[HDCTF2019]Maze(初识逆向)
1106 1
|
程序员 编译器 C语言
C语言中的预处理器指令,涵盖其基本概念、常见指令(如`#define`、`#include`、条件编译指令等)、使用技巧及注意事项
本文深入解析C语言中的预处理器指令,涵盖其基本概念、常见指令(如`#define`、`#include`、条件编译指令等)、使用技巧及注意事项,并通过实际案例分析,展示预处理器指令在代码编写与处理中的重要性和灵活性。
788 2
|
存储 算法 Java
数据结构与算法学习八:前缀(波兰)表达式、中缀表达式、后缀(逆波兰)表达式的学习,中缀转后缀的两个方法,逆波兰计算器的实现
前缀(波兰)表达式、中缀表达式和后缀(逆波兰)表达式的基本概念、计算机求值方法,以及如何将中缀表达式转换为后缀表达式,并提供了相应的Java代码实现和测试结果。
1836 0
数据结构与算法学习八:前缀(波兰)表达式、中缀表达式、后缀(逆波兰)表达式的学习,中缀转后缀的两个方法,逆波兰计算器的实现
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
Ubuntu 虚拟化
软件安装(二):VMware ubuntu20.04 安装步骤
这篇文章是关于如何在VMware Workstation 16 Player上安装Ubuntu 20.04桌面版的详细步骤指南。
1908 2
软件安装(二):VMware ubuntu20.04 安装步骤
|
存储 缓存 Java
volatile关键字最全原理剖析
【9月更文挑战第27天】`volatile` 是一个用于修饰变量的关键字,告知编译器被修饰的变量可能在程序控制流之外被改变。在多线程环境下,`volatile` 确保变量的值每次从内存中读取,保持最新状态,但不能解决所有同步问题。在硬件交互中,`volatile` 用于内存映射的 I/O 操作,确保读取最新值。不同编程语言如 C/C++ 和 Java 中的 `volatile` 用法略有差异,但都是处理易变变量的重要工具。
989 5
数据结构学习记录——堆的删除(思路图解、代码实现、逐段解析)
数据结构学习记录——堆的删除(思路图解、代码实现、逐段解析)
506 1