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修饰的变量是直接被当成常量来使用的,因此使用常变量来申明数组的定义,并不会有任何的报错

目录
相关文章
|
6月前
|
存储 C++
C++系列三:变量、常量
C++系列三:变量、常量
|
6月前
|
存储 Unix 编译器
变量和常量
这篇内容介绍了编程中的变量概念和使用。变量是可变的存储单元,用于存放数据,其值在程序运行期间可以改变。变量需先定义后使用,声明时指定类型,如`类型关键字 变量名;`。变量可分为局部变量(在代码块内定义)和全局变量(代码块外),全局变量在整个程序中可见,局部变量只在定义它的代码块内有效。初始化变量时,未赋值的变量值可能是随机的。编程最佳实践建议使用有意义的标识符,并遵循特定平台的风格。此外,常量是不可变的,可以通过宏常量(`#define`)或`const`关键字定义,常量有助于提高代码可读性和维护性。不同数据类型支持不同的运算操作。
41 0
|
4月前
const修饰指针
const修饰指针
25 0
|
6月前
|
编译器 C++
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
|
6月前
1-5 运算量 变量 和 常量
1-5 运算量 变量 和 常量
28 0
|
6月前
|
编译器 C++
C++:编译器对被const修饰变量的处理行为(替换)
C++:编译器对被const修饰变量的处理行为(替换)
41 0
|
6月前
|
存储 C++ 容器
【C/C++】C/C++编程——变量和常量
【C/C++】C/C++编程——变量和常量
90 0
|
6月前
|
编译器 C++
C++ 中 const 和 constexpr 关键字解析:常量、函数和指针
很多 C++ 的初学者看到 const 这个关键字的第一反应都是一头雾水,主要是因为 const可 以出现在很多的位置,以及后面加入的 constexpr 更是常常感到困惑,今天就为大家一一解释出现它们的含义和以及作用
179 0
|
11月前
|
编译器 C++
const修饰的变量通过指针修改的问题
const修饰的变量通过指针修改的问题
87 0
趣味讲解const修饰指针变量
趣味讲解const修饰指针变量
53 0