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

目录
相关文章
|
2天前
|
C++
C++之变量与常量
C++之变量与常量
4 0
|
1月前
|
编译器 C++
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
|
1月前
|
JavaScript 前端开发 编译器
let 或 const 来声明变量的区别
let 或 const 来声明变量的区别
|
1月前
|
编译器 C++
C++:编译器对被const修饰变量的处理行为(替换)
C++:编译器对被const修饰变量的处理行为(替换)
19 0
|
1月前
|
算法 C语言 C++
【C/C++ 关键字 类型限定符 】 C/C++ 中 const的用法:限制变量的作用域和可见性
【C/C++ 关键字 类型限定符 】 C/C++ 中 const的用法:限制变量的作用域和可见性
24 0
|
1月前
|
编译器 C++
C++ 中 const 和 constexpr 关键字解析:常量、函数和指针
很多 C++ 的初学者看到 const 这个关键字的第一反应都是一头雾水,主要是因为 const可 以出现在很多的位置,以及后面加入的 constexpr 更是常常感到困惑,今天就为大家一一解释出现它们的含义和以及作用
121 0
|
1月前
|
C++
c++中const修饰成员函数的问题
问题引入: 看下面这一段代码:
33 0
|
6月前
|
编译器 C++
const修饰的变量通过指针修改的问题
const修饰的变量通过指针修改的问题
63 0
|
7月前
趣味讲解const修饰指针变量
趣味讲解const修饰指针变量
33 0
|
8月前
|
Java
1.3 常量与变量
1.3 常量与变量
37 0