【c++】常量周边:常量概念及定义

目录

前言

1.常量是什么?

2.常量的的类型

本质区别:

1)文字常量(无法取地址)

🌷什么是字面值??

字面值后缀

🌷文字(字面)常量的基本类型

1.整型常量

2.实型常量

3.布尔常量

4.字符常量

 5.符号常量

2)常变量

参考文章:

💗感谢阅读!💗


前言

常量的深入学习,有助于我们对于之后的const关键字的学习,同时也帮助我们更好对于类型转换、临时对象具有常性的理解!!

1.常量是什么?

常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量

常量可以是任何的基本数据类型,可分为整型数字、浮点数字、字符、字符串和布尔值。

常量就像是常规的变量,只不过常量的值在定义后不能进行修改

2.常量的的类型

在C/C++编程时,经常遇到以下几个概念:常量、文字常量、符号常量、字面常量、常变量、字符串常量和字符常量,网上博客资料也是千篇千律,不尽相同。

在C/C++中常量分为两种:文字常量(Literal constant)和常变量(constant variable)。


本质区别:

文字常量和常变量的本质区别:

  • 文字常量编译之后存储在代码区,不可寻址。
  • 常变量存储在数据区,可寻址。

1)文字常量(无法取地址)

文字常量又称为“字面常量” 、“字面值常量”,包括数值常量字符常量符号常量

其特点是编译后写在代码区,不可寻址,不可更改,属于指令的一部分。

🌷什么是字面值??

字面值是直接插入到代码中的值。例如

return 5;                     // 5 是整数字面值
bool myNameIsAlex { true };   // true 是bool字面值
double d { 3.4 };             // 3.4 是double 字面值
std::cout << "Hello, world!"; // "Hello, world!" 是 C语言格式的字符串字面值
  • 字面值可以直接进行使用!无需其他操作!
  • 字面值有时被称为字面值常量,因为它们的值无法重新定义(5总是指整数值5)。
  • 字面值的类型是从字面值的值中推导出来的。例如,作为整数(例如5)的字面值被推断为int类型。
字面值后缀

如果字面值的默认类型不符合需要,则可以通过添加后缀来更改字面值的类型:

类别后缀类型
integralunsigned intu or U
integrallongl or L
integralunsigned longul, uL, Ul, UL, lu, lU, Lu, LU
integrallong longll or LL
integralunsigned long longull, uLL, Ull, ULL, llu, llU, LLu, LLU
integralThe signed version of std::size_t (C++23)z or Z
integralstd::size_t (C++23)uz, uZ, Uz, UZ, zu, zU, Zu, ZU
floating pointfloatf or F
floating pointlong doublel or L
stringstd::strings
stringstd::string_viewsv

🌷文字(字面)常量的基本类型

可以概括为:整型常量、实型常量、布尔常量、字符常量、符号常量。

1.整型常量

整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。

通常不需要为整型字面值使用后缀。

以下是各种类型的整数常量的实例:

85         // 十进制
0213       // 八进制 
0x4b       // 十六进制 
30         // 整数 
2.实型常量

实型常量只采用十进制小数形式和指数形式表示,包括单精度浮点数(float)、双精度浮点数(double)和长双精度浮点数(long double)。

 

规范化的指数形式

在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。

且e后面的指数必须为整数。

例如:123.456的指数形式

123.456e0,12.3456e,0.123456e3,0.0123456e4,0.00123456e

规范化的指数函数?

1.23456e2 = 1.23456 * 10^2

3.14159       // 合法的 
314159E-5L    // 合法的 31459*10^-5 = 0.314159

510E          // 非法的:不完整的指数
210f          // 非法的:没有小数或指数
.e55          // 非法的:缺少整数或分数
3.布尔常量

布尔常量共有两个,它们都是标准的 C++ 关键字:

  • true 值代表真。
  • false 值代表假。

我们不应把 true 的值看成 1,把 false 的值看成 0。

4.字符常量

用单引号(‘ ’)括起来的一个字符。

注:

(1)字符常量只能用单引号括起来,不能用双引号或其他括号;

(2)只能是单个字符,不能是字符串;

(3)字符可以是ASCII码字符中任意字符。(常见的128个)

(4)还会存在,特殊字符:转义字符(以“\”开头的)

'a'   //合法
'\n'  //合法

 

 5.符号常量

用标示符代表一个常量,使用之前必须定义。

#define 标识符 常量

  • 预处理命令后不用加分号!!!
  • 符号常量名用大写,变量名用小写,以示区别
#define N 30

#include<stdio.h>

int main()

{

	int num, total;

	num = 10;

	total = num * N;

	printf("total = % d\n", total);
	return 0;

}

枚举常量

  1. 枚举并不是使用下标来定位元素值,而是使用关键字;
  2. 不同的enum中的值可以相同,但是名称必须不同;
  3. enum的默认值为0, 1, 2...,而数组是按照类型默认为其空值或者0
enum months {
    Jan=1, 
    Feb,
    Mar, 
    Apr, 
    May
};

2)常变量

const修饰的变量称为常变量。不能被修改。因此存储在常量区,可寻址。

且const修饰的变量,必须在定义的时候实现初始化。

常变量在C/C++中由const关键字来定义,分为全局常变量和局部常变量。
二者的区别在于:

全局常变量存储在静态存储区的常量区,属于只读内存,不可修改。

局部常变量存储在栈区,在高级语言语义层面上由编辑器做语法检查来保障其值不可修改,因不是放在只读内存中,可以获得局部常变量的地址,间接进行修改

#include <iostream>
using namespace std;
int main()
{
    const double pi=3.141592;            //圆周率的值用pi表示
    cout<<"圆周率的近似值是"<<pi<<endl;
    return 0;
}

参考文章:

C/C++文字常量与常变量的概念与区别 - This_is_bill - 博客园 (cnblogs.com)

字面值常量 – C++学习网 (studycpp.cn)

C++ 常量 | 菜鸟教程 (runoob.com)


💗感谢阅读!💗


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值