【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.314159510E          // 非法的:不完整的指数
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)


💗感谢阅读!💗


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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双指针--优选算法

个人主页&#xff1a;敲上瘾-CSDN博客 个人专栏&#xff1a;游戏、数据结构、c语言基础、c学习、OJ题 前言&#xff1a; 该篇文章我们主要来学习的是双指针算法&#xff0c;对于该类算法我们可以直接来做题&#xff0c;从题中去感知该算法的魅力&#xff0c;最后再从题中做总…

Elasticsearch Suggesters API详解与联想词自动补全应用

Elasticsearch Suggesters API详解与联想词自动补全应用 引言Elasticsearch Suggesters1. Term Suggester实现步骤示例 2. Phrase Suggester示例 3. Completion Suggester创建映射和插入数据查询示例 4. Context Suggester示例 Completion Suggester1. 工作原理2. 使用流程3. 使…

东软 在大健康路上“笨鸟先飞”

若不是东软医疗引入“国家队”通用技术集团作为其最重要的战略投资人&#xff0c;恐怕很多人并不会留意东软“蛰伏”在大健康的赛道上&#xff0c;已有30年。 1997年的一天&#xff0c;沈阳高新技术产业开发区的东大软件园里&#xff0c;创立东软不过6年时间的刘积仁思量着眼前…

并发性服务器

同一时刻能处理多个客户端 多进程&#xff1a; int init_tcp_ser(const char *ip,unsigned short port) {int sockfd socket(AF_INET,SOCK_STREAM,0);if(-1 sockfd){perror("fail socket");return -1;}struct sockaddr_in ser;ser.sin_family AF_INET;ser.sin_por…

tomcat在eclipse中起动成功,无法访问tomcat主页

最近通过geoserver的war包将&#xff0c;geoserver服务部署到了tomcat&#xff0c;发现在eclipse中启动服务后&#xff0c;无法访问localhost&#xff1a;8080主页&#xff0c;geoserver主页&#xff1a;localhost:8080/geoserver/web同样也无法访问。 只需要双击下面的server…

【生成模型系列(初级)】自编码器——深度学习的数据压缩与重构

【通俗理解】自编码器——深度学习的数据压缩与重构 第一节&#xff1a;自编码器的类比与核心概念 1.1 自编码器的类比 你可以把自编码器想象成一个“智能压缩机”&#xff0c;它能够把输入的数据&#xff08;比如图片&#xff09;压缩成一个更小的表示&#xff08;编码&#…

MacOS使用FileZilla通过ssh密钥文件连接远程服务器(已解决)

需求描述 mac电脑,使用filezilla通过FTP连接远程服务器,使用ssh密钥文件代替密码。 版本信息 MacOS:Sonoma 14.5 M3芯片 FileZilla:3.66.5 在这里插入图片描述 连接 1. 创建站点 打开filezilla工具,右上角选择“文件 -> 站点管理器”,打开站点管理器弹窗。 2.…

仿华为车机功能之--修改Launcher3,实现横向滑动桌面空白处切换壁纸

本功能基于Android13 Launcher3 需求:模仿华为问界车机,实现横向滑动桌面空白处,切换壁纸功能(本质只是切换背景,没有切换壁纸)。 实现效果: 实现思路: 第一步首先得增加手势识别 第二步切换底图,不切换壁纸是因为切换壁纸动作太大,需要调用到WallpaperManager,耗…

StringTable

10.1. String的基本特性 String&#xff1a;字符串&#xff0c;使用一对""引起来表示String声明为final的&#xff0c;不可被继承String实现了Serializable接口&#xff1a;表示字符串是支持序列化的。String实现了Comparable接口&#xff1a;表示string可以比较大小…

六. 部署分类器-trt-engine-explorer

目录 前言0. 简述1. 案例运行2. 补充说明3. engine分析结语下载链接参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习课程第六章—部署分类器&#xff0c;一起来学习 trt-engine…

更新RK3588开发板的rknn_server和librknnrt.so【这篇文章是RKNPU2从入门到实践 --- 【5】的配套文章】

作者使用的平台有&#xff1a; 一台装有Windows系统的宿主机&#xff0c;在该宿主机上装有Ubuntu 20.04虚拟系统&#xff1b; 瑞芯微RK3588开发板&#xff0c;开发板上的系统为Ubuntu22.04系统&#xff1b; 更新板子的 rknn_server 和 librknnrt.so&#xff0c;rknn_server 和…

借鉴腾讯系统架构从小到大的过程 - 如何做好一个系统设计?不限于(慧哥)慧知开源充电桩平台

推荐一套企业级开源充电桩平台&#xff1a;完整代码包含多租户、硬件模拟器、多运营商、多小程序&#xff0c;汽车 电动自行车、云快充协议&#xff1b;——(慧哥)慧知开源充电桩平台&#xff1b;https://liwenhui.blog.csdn.net/article/details/134773779?spm1001.2014.3001…

倒计时1天!每日一题,零基础入门FPGA

近年来&#xff0c;FPGA工程师凭借着远高于传统软件开发工程师的薪酬&#xff0c;吸引了越来越多的人转行。 然而&#xff0c;入门FPGA并非易事。你需要有清晰的学习路线&#xff0c;包括它的基本组成&#xff08;如可编程逻辑块CLB、输入输出块IOB、内部连线资源等&#xff0…

JS设计模式之“分即是合” - 建造者模式

引言 当我们在进行软件编程时&#xff0c;常常会遇到需要创建复杂对象的情况。这些对象可能有多个属性&#xff0c;属性之间存在依赖关系&#xff0c;或需要按照特定的骤来创建。在这种情况下&#xff0c;使用建造者模式&#xff08;Builder Pattern&#xff09;可以提供一种活…

selenium启动总报错 WebDriverManager总是异常

我的环境用这个自动管理驱动的工具 WebDriverManager 总是报错 尝试过很多方法都没有&#xff0c;只好手动指定浏览器的位置 System.setProperty("webdriver.chrome.driver", "C:\\Users\\27224\\.cache\\selenium\\chromedriver\\win64\\128.0.6613.84\\chrome…

HTTP 协议详解

0x01&#xff1a;HTTP 协议简介 HTTP&#xff08;HyperTextTransferProtocol&#xff0c;超文本传输协议&#xff09;&#xff0c;是一个工作在应用层的协议&#xff0c;它通常运行在 TCP 之上&#xff0c;它指定了客户端以什么样的格式发送信息&#xff0c;以及得到什么样的响…

uniapp微信小程序开发测试获取手机号码

先申请测试号 注意认证但是没有完全认证不要试测试号解密如下 总结我自己的两大坑 1.官网的WXBizDataCrypt需要导入crypto要提前下载但是试了很多次没有效果重新编写这个。将crypto库换成crypto-js库 2.我一直在尝试用下有下面这个界面的测试号不行获取不到用户的code还是啥忘记…

基于SpringBoot+Vue+MySQL的社区维修平台

系统背景 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于社区维修平台所牵扯的管理及数据保存都是非常多的&#xff0c;例如住户管理、社区公告管理、维修工管理、维修订单管理、接单信息管理、订单信息管理、在线沟通管理、举报信息管理、留言板管理、系统管理等…

记Spring HTTP Invoker远程调用的使用(二)基于Servlet方式,配置servlet映射url-pattern实现

目录 前言 一、概念 二、代码实现 1. 服务端实现 2. 客户端实现 前言 本篇接上一篇记Spring HTTP Invoker远程调用的使用&#xff08;一&#xff09;基于Url映射方式&#xff0c;DispatcherServlet统一处理实现-CSDN博客https://blog.csdn.net/u011529483/article/details/141…

搭建高可用OpenStack(Queen版)集群(九)之部署nova计算节点

一、搭建高可用OpenStack&#xff08;Queen版&#xff09;集群之部署计算节点 一、部署nova 1、安装nova-compute 在全部计算节点安装nova-compute服务 yum install python-openstackclient openstack-utils openstack-selinux -y yum install openstack-nova-compute -y 若yu…