C++数据类型、变量常量

个人主页:PingdiGuo_guo

收录专栏:C++干货专栏

大家新年快乐,今天我们来学习C++的数据类型,变量常量。

文章目录

1.数据类型的概念与思想

1.1基本数据类型

1.2复合数据类型

1.3类型修饰符

1.4类型转换

1.4.1static_cast

1.4.2dynamic_cast

1.4.3const_cast

1.4.4 reinterpret_cast

1.4.5atoi()和atol()

1.4.6stoi()和stol()

1.5强类型和静态类型

2.变量常量的概念与思想

2.1变量

2.1.1声明

2.1.2赋值

2.1.3生命周期

2.1.4变量名

2.2常量

2.2.1值不能修改

2.2.2常量的类型

2.2.3命名规则

2.2.4常量表达式

2.2.5关键字

2.3变量常量的练习

3.总结


1.数据类型的概念与思想

数据类型是编程语言中用来表示数据的分类和存储方式的概念。它定义了数据在计算机中的内存分配和操作方式,包括数据的值范围、存储长度、所占字节数等属性。数据类型有助于提高代码的可读性、可维护性和性能。而数据类型基本可以分为以下五种:

1.1基本数据类型

C++中的基本数据类型包括整型(int、short、long、long long)、浮点型(float、double)、字符型(char)和布尔型(bool)。

整型用于表示整数,浮点型用于表示带小数的实数,字符型用于表示单个字符,布尔型用于表示真或假的值。

1.2复合数据类型

C++还支持复合数据类型,包括数组、结构体和类等。

数组是一组具有相同类型的元素的集合,可以用于存储一系列的数据。

结构体是用户自定义的数据类型,可以包含多个不同类型的成员。

类是一种特殊的结构体,可以封装数据和操作,并通过对象来访问和操作数据。

1.3类型修饰符

C++提供了一些类型修饰符,可以修改数据类型的属性。

const修饰符用于声明常量,表示该变量的值在初始化后不能被修改。

unsigned修饰符用于声明无符号类型,表示该变量的取值范围为非负数。

signed修饰符用于声明有符号类型,表示该变量的取值范围包括正数、负数和零。

1.4类型转换

C++支持隐式类型转换和显式类型转换。

隐式类型转换是自动进行的,例如将整数赋值给浮点数变量,将字符赋值给整数变量等。

显式类型转换需要使用类型转换运算符,包括static_cast、dynamic_cast、reinterpret_cast和const_cast等。

在C++中,强制类型转换是一种将一个数据类型转换为另一个数据类型的方式。它可以通过显式的方式告诉编译器进行类型转换,但需要注意的是,强制类型转换可能会导致数据丢失或不符合预期的结果,因此在使用时需要谨慎,并确保转换是安全和合理的。

1.4.1static_cast

用于常见的隐式转换、标准转换、上行转换(子类指针转换为父类指针)、下行转换(父类指针转换为子类指针)等。但需要注意的是,static_cast无法进行动态类型检查。
 

int a = 10;
double b = static_cast<double>(a); // 将整数a转换为浮点数b

1.4.2dynamic_cast

用于在继承关系中进行安全的向下类型转换。它会进行运行时类型检查,如果转换不合法则返回nullptr(对于指针)或抛出std::bad_cast异常(对于引用)。

 

class Base { ... };
class Derived : public Base { ... };Base* basePtr = new Derived;
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr); // 将父类指针转换为子类指针
if (derivedPtr != nullptr) {// 转换成功
}

1.4.3const_cast

用于去除变量的const或volatile属性,修改变量的只读属性。通常用于函数重载、函数指针的赋值等场景下。

 

const int a = 10;
int b = const_cast<int>(a); // 去除a的const属性并赋值给b

1.4.4 reinterpret_cast

用于将一个指针或引用转换为其他任意类型的指针或引用。它是C++中最具有风险性的类型转换,潜在的未定义行为和危险也最高。
 

int a = 10;
char* b = reinterpret_cast<char*>(&a); // 将整数a的地址转换为字符指针


需要注意的是,尽管强制类型转换提供了更大的灵活性,但过度使用强制类型转换会增加代码的复杂性和可读性,也会增加出错的可能性。因此,在进行强制类型转换时应该慎重考虑,并确保转换是必要且安全的。

在C++中,还可以使用一些标准库函数来实现强制类型转换,这些函数位于<cstdlib>和<cstdint>等头文件中。下面是一些常用的库函数来实现类型转换的示例:

1.4.5atoi()和atol()

用于将字符串转换为整数和长整数。

 
#include <cstdlib>
#include <iostream>int main() {const char* str = "12345";int num = atoi(str); // 字符串转换为整数std::cout << num << std::endl;const char* str2 = "9876543210";long longNum = atol(str2); // 字符串转换为长整数std::cout << longNum << std::endl;return 0;
}

1.4.6stoi()和stol()

用于将字符串转换为整数和长整数,支持更多的错误处理机制。

#include <string>
#include <iostream>int main() {std::string str = "12345";int num = std::stoi(str); // 字符串转换为整数std::cout << num << std::endl;std::string str2 = "9876543210";long longNum = std::stol(str2); // 字符串转换为长整数std::cout << longNum << std::endl;return 0;
}

1.5强类型和静态类型

C++是一种强类型语言,即变量在使用之前必须声明其数据类型,且不能进行不兼容的操作。

int num = 10;
char ch = 'A';// 下面的语句会导致编译错误,因为不能将整数类型赋值给字符类型
ch = num;  // 错误示例

在上述示例中,整数类型不能直接赋值给字符类型,因为它们是不同的数据类型,需要进行显式的类型转换才能实现赋值。


C++是一种静态类型语言,即变量的类型在编译时确定,不能动态改变。

int num = 10; 
float f = 3.14; // 下面的语句会导致编译错误,因为不能将整数类型和浮点数类型直接相加 float result = num + f; // 错误示例 
在上述示例中,整数类型和浮点数类型属于不同的数据类型,不能直接进行计算。需要进行类型转换或者使用相同类型的变量才能进行计算。

2.变量常量的概念与思想

2.1变量

在 C++ 中,变量是用来存储数据值的一种抽象概念。它们类似于数学中的变量,可以用来表示不同的值。

变量在 C++ 中有以下几个重要的特点:

2.1.1声明

在使用变量之前,需要先声明变量的类型和名称。例如,可以使用 int 关键字声明一个整数类型的变量。

int a;

2.1.2赋值

变量可以通过赋值操作符(=)来给定一个特定的值。例如,可以将一个整数值赋给一个整型变量。

int a=10;

还可以变量和变量之间赋值:

int a=10;
int b=a;

2.1.3生命周期

变量有一个特定的生命周期,即存在于特定的代码块中。当超出变量的作用域时,变量会被销毁,其占用的内存空间被释放。

2.1.4变量名

变量名是用来标识变量的唯一名称。变量名必须遵循一定的命名规则,如以字母或下划线开头,只包含字母、数字和下划线等。

​
int a,_a;
//错误示例如下:
int 和;//中文
int 123;//数字开头

在编程思想上,变量的使用应考虑以下几个方面:

1.变量的命名应具有描述性,能够清晰地表达变量的作用和含义,以提高代码的可读性。

2.变量的作用域和生命周期应根据需求进行适当的管理,避免不必要的变量冲突和内存泄漏。

3.变量的类型选择应根据数据的特性和计算需求进行合理的选择,以提高程序的性能和正确性。

4.变量的值应在使用前进行初始化,避免使用未定义的变量值,以减少程序错误的发生。

2.2常量

常量是在程序中使用固定值的标识符,它们在声明后不能被修改。常量可以是数字、字符或字符串等,并且在声明时必须被初始化。

在 C++ 中,常量有以下几个重要的特点:

2.2.1值不能修改

常量在声明后不能被修改,一旦赋值后,其值在整个程序执行过程中保持不变。

2.2.2常量的类型

常量可以是整型、浮点型、字符型、字符数组、字符串等不同类型的数据。

2.2.3命名规则

常量的命名规则与变量类似,但在命名时通常使用大写字母或下划线来表示。

count int A;

2.2.4常量表达式

常量表达式是指在编译时就可以计算出结果的表达式。常量表达式可以用于数组的大小、枚举值等。

2.2.5关键字

在 C++ 中,可以使用关键字 const 来定义常量。常量的定义语法如下:

const 数据类型 常量名称 = 值;

其中,数据类型表示常量的类型,常量名称表示常量的名称,值表示常量的初始值。

常量在编程思想上的应用主要体现在以下几个方面:

1.程序的可维护性:使用常量可以提高程序的可维护性,因为常量的值一旦确定不能被修改,可以减少代码中可能出现的错误。

2.可读性和可理解性:使用常量可以使代码更具有可读性和可理解性,因为常量可以用有意义的名称来表示特定的值,使代码更易于阅读和理解。

3.程序的性能:常量表达式在编译时就可以计算出结果,可以在一定程度上提高程序的性能。

4.安全性:使用常量可以提高程序的安全性,因为常量的值不会被修改,可以防止非预期的数值变化。

2.3变量常量的练习

题目:计算圆的面积和周长。

#include <iostream>
using namespace std;int main() {const float PI = 3.14159;     // 定义常量 PIfloat radius;                 // 定义变量 radiusfloat area, circumference;    // 定义变量 area 和 circumferencecout << "Enter the radius of the circle: ";cin >> radius;area = PI * radius * radius;           // 计算面积circumference = 2 * PI * radius;       // 计算周长cout << "The area of the circle is: " << area << endl;cout << "The circumference of the circle is: " << circumference << endl;return 0;
}

在上述代码中,首先定义了一个常量 PI 来存储圆周率的值。然后定义了一个变量 radius 来存储用户输入的半径值,以及两个变量 area 和 circumference 来存储计算结果。通过用户输入的半径值计算了圆的面积和周长,并使用输出语句将结果打印出来。

3.总结

本篇博客到这里就结束了,感谢大家的支持与观看,如果有好的建议欢迎留言,谢谢大家啦!

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【射影几何15】python双曲几何工具geometry_tools

目录 一、说明二、​环境问题&#xff1a;如何安装三、实现一个简单的例子四、绘制双曲组五、使用有限状态自动机加快速度六、资源和代码 一、说明 Geometry_tools 是一个 Python 包&#xff0c;旨在帮助您处理和可视化双曲空间和射影空间上的群动作。 该包主要构建在 numpy、…

【EAI 011】SayCan: Grounding Language in Robotic Affordances

论文标题&#xff1a;Do As I Can, Not As I Say: Grounding Language in Robotic Affordances 论文作者&#xff1a;Michael Ahn, Anthony Brohan, Noah Brown, Yevgen Chebotar, Omar Cortes, Byron David, Chelsea Finn, Chuyuan Fu, Keerthana Gopalakrishnan, Karol Hausm…

【综述】2024 [arXiv] 通用时间序列表示学习

论文标题&#xff1a;Universal Time-Series Representation Learning: A Survey 链接&#xff1a;https://arxiv.org/abs/2401.03717 作者&#xff1a;Patara Trirat, Yooju Shin, Junhyeok Kang, Youngeun Nam, Jihye Na, Minyoung Bae, Joeun Kim, Byunghyun Kim, Jae-Gil…

用Python动态展示排序算法

文章目录 选择冒泡插入排序归并排序希尔排序 经常看到这种算法可视化的图片&#xff0c;但往往做不到和画图的人心灵相通&#xff0c;所以想自己画一下&#xff0c;本文主要实现归并排序和希尔排序&#xff0c;如果想实现其他算法可参考这篇 C语言实现各种排序算法[选择&#x…

《雾锁王国》服务器怎么搭建,阿里云一键部署雾锁王国新手教程

上次讲了怎么搭建幻兽帕鲁服务器&#xff0c;今天讲讲如何搭建雾锁王国服务器&#xff0c;其实方法也非常简单&#xff0c;跟幻兽帕鲁一样&#xff0c;都是可以通过一键部署的方式来搭建的。 下面将会讲两种搭建《雾锁王国》服务器的方式&#xff0c;一种是你没有买过服务器&a…

leetcode:51.N皇后

起初会想到暴力&#xff0c;但是N不确定&#xff0c;所以不确定for的嵌套层数&#xff0c;所以我们采用回溯算法。 树形结构&#xff1a; 1.树的深度是第depth层 2.树的宽度是对每一行进行遍历 代码实现&#xff1a; 1.result是三维数组&#xff0c;一个棋盘是二维&#x…

电商小程序06用户审核

目录 1 创建自定义应用2 显示待办数量3 创建审核页面4 开发审核功能5 搭建布局6 最终效果总结 上一篇我们讲解了用户注册的功能&#xff0c;用户注册之后状态是待审核&#xff0c;需要管理员进行审核。通常给管理员提供一套PC端的软件进行相关的操作&#xff0c;在低代码中&…

Java强训day18(选择题编程题)

选择题 编程题 题目1 import java.util.Scanner;public class Main { public static void main(String[] args) {//1 |1 //1 |1//1 1 |2//1 1 1 |3//1 1 1 1 1 |5Scanner sc new Scanner(System.in);int n sc.nextInt();//从出生后第3个月起每个月都生一只兔子//一月的时…

FRP内网穿透如何避免SSH暴力破解(二)——指定地区允许访问

背景 上篇文章说到&#xff0c;出现了试图反复通过FRP的隧道&#xff0c;建立外网端口到内网服务器TCP链路的机器人&#xff0c;同时试图暴力破解ssh。这些连接造成了流量的浪费和不必要的通信开销。考虑到服务器使用者主要分布在A、B、C地区和国家&#xff0c;我打算对上一篇…

政安晨:示例演绎机器学习中(深度学习)神经网络的数学基础——快速理解核心概念(二){两篇文章讲清楚}

这一篇与上一篇是兄弟篇&#xff0c;意在通过两篇文章讲清楚深度学习中神经网络的数学基础&#xff0c;第一次看到这篇文章的小伙伴可以从上一篇文章看起&#xff08;包括搭建环境等等都在上一篇&#xff09;&#xff0c;上一篇链接如下&#xff1a; 政安晨&#xff1a;示例演…

【Linux】模块出入点与模块信息

&#x1f525;博客主页&#xff1a;PannLZ &#x1f38b;系列专栏&#xff1a;《Linux系统之路》 &#x1f94a;不要让自己再留有遗憾&#xff0c;加油吧&#xff01; 文章目录 1模块的入点和出点2模块信息 1模块的入点和出点 内核驱动程序都有入点和出点&#xff1a;前者对应…

《CSS 简易速速上手小册》第1章:CSS 基础入门(2024 最新版)

文章目录 1.1 CSS 语法和选择器&#xff1a;挑选你的画笔1.1.1 基础知识1.1.2 重点案例&#xff1a;创建一个响应式导航菜单1.1.3 拓展案例 1&#xff1a;为特定链接添加图标1.1.4 拓展案例 2&#xff1a;创建一个简单的问答折叠面板 1.2 盒模型的基础&#xff1a;构建你的乐高…

腾讯云4核8G服务器最大能承载多少用户在线?12M带宽

腾讯云轻量4核8G12M轻量应用服务器支持多少人同时在线&#xff1f;通用型-4核8G-180G-2000G&#xff0c;2000GB月流量&#xff0c;系统盘为180GB SSD盘&#xff0c;12M公网带宽&#xff0c;下载速度峰值为1536KB/s&#xff0c;即1.5M/秒&#xff0c;假设网站内页平均大小为60KB…

[架构之路-275]:五张图向你展现软件开发不仅仅是编码,而是一个庞大的系统工程

目录 一、软件开发是组织架构的一部分&#xff0c;是为业务服务的 二、软件开发是一个系统工程&#xff0c;需要组织各种组织内的资源 三、目标软件是一个复杂的系统 四、软件开发过程本身是一个系统工程 五、目标软件的测试验证是一个系统工程 一、软件开发是组织架构的一…

lv14 led驱动设备树版本 13

led驱动代码中无法给其他开发板重用&#xff0c;编程依据不清晰&#xff0c;如下&#xff0c;修改后尽量在代码中不直接修改寄存器。 把编程依据写到设备树中 一、起源 减少垃圾代码 减轻驱动开发工作量 驱动代码和设备信息分离 参考Open Fireware设计 用来记录硬件平台中…

数据结构-->线性表-->单链表

链表的定义 链表&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 与顺序表不同的是&#xff0c;链表里的每节都是独立申请下来的空间&#xff0c;我们称之为“节点、结点”。 节点的组成主要由…

机器翻译后的美赛论文怎么润色

美赛论文的语言表达一直是组委会看重的点&#xff0c;清晰的思路和地道的语言在评审中是重要的加分项。 今天我们就来讲讲美赛论文的语言问题。 我相信有相当一部分队伍在打美赛的时候&#xff0c;出于效率的考量&#xff0c;都会选择先写中文论文&#xff0c;再机翻成英文。 …

ChatGPT4 教你如何完成SQL的实践应用

对数据库的各项应用与操作都离不开SQL来对数据进行增删改查。 例如 &#xff1a; 有一张某公司职员信息表如下&#xff1a; 需求1&#xff1a;在公司职员信息表中&#xff0c;请统计各部门&#xff0c;各岗位下的员工人数。 如果这个SQL语句不会写或者不知道怎么操作可以交给…

Linux运行级别 | 管理Linux服务

Linux运行级别 级别&#xff1a; 0关机1单用户2多用户但是不运行nfs网路文件系统3默认的运行级别&#xff0c;给一个黑的屏幕&#xff0c;只能敲命令4未使用5默认的运行级别&#xff0c;图形界面6重启切换运行级别&#xff1a; init x管理Linux服务 systemctl命令&#xf…

【北邮鲁鹏老师计算机视觉课程笔记】02 filter

1 图像的类型 二进制图像&#xff1a; 灰度图像&#xff1a; 彩色图像&#xff1a; 2 任务&#xff1a;图像去噪 噪声点让我们看得难受是因为噪声点与周边像素差别很大 3 均值 滤波核 卷积核 4 卷积操作 对应相乘再累加起来 卷积核记录了权值&#xff0c;把权值套到要卷积…