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

news2024/11/19 5:54:17

个人主页: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;     // 定义常量 PI
    float radius;                 // 定义变量 radius
    float area, circumference;    // 定义变量 area 和 circumference

    cout << "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://www.coloradmin.cn/o/1442970.html

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

相关文章

【机器学习】数据清洗之处理缺失点

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步…

腾讯云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…

HTML5和CSS3强化知识总结

HTML5的新特性 HTML5的新增特性主要是针对于以前的不足&#xff0c;增一些新的标签、新的表单和新的表单属性等。这些新特性都有兼容性问题&#xff0c;基本是IE9以上版本的浏览器才支持&#xff0c;如果不考虑兼容性问题&#xff0c;可以大量使用这些新特性。 HTML5新增的语义…

创建自己的系统创富法则,做个轻松赚钱的甩手掌柜

一、教程描述 本套系统创富教程&#xff0c;大小744.80M&#xff0c;共有28个文件。 二、教程目录 01.走遍全球四十多个国家&#xff0c;我才发现赚钱的本质如此雷同.mp4 02.靠工资技术赚钱太慢&#xff0c;想赚到自己的第一个一百万的方法是&#xff1f;.mp4 03.不服暴发…

uv机器电机方向极性

爱普生主板设置X、Y 电机方向极性&#xff1a;请根据实际情况设置&#xff0c;开机初始化时如果电机运动方向反了则修改此极性。 理光主板设置X、Y 电机方向极性

研究多态恶意软件,探讨网络安全与AI

前言 近期ChatGPT火遍全球&#xff0c;AI技术被应用到了全球各行各业当中&#xff0c;国内外各大厂商也开始推出自己的ChatGPT&#xff0c;笔者所在公司在前段时间也推出了自研的安全GPT&#xff0c;AI技术在网络安全行业得到了很多的应用&#xff0c;不管是网络安全研究人员、…

【51单片机】自定义静态数码管显示(设计思路&代码演示)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 本章节内容为【实现动静态数码管】项目的第三个模块完整章节&#xff1a;传送门 欢迎订阅 YY滴C专栏&#xff01;更多干货持…

【资料分享】基于单片机大气压监测报警系统电路方案设计、基于飞思卡尔的无人坚守点滴监控自动控制系统设计(程序,原理图,pcb,文档)

基于单片机大气压监测报警系统电路方案设计 功能&#xff1a;实现的是大气压检测报警系统&#xff0c;可以通过传感器实时检测当前大气压值&#xff0c;可以设定大气压正常范围&#xff0c;当超过设定范围进行报警提示。 资料&#xff1a;protues仿真&#xff0c;程序&#x…

SpringCloud-高级篇(十九)

我们已经学过使用 SpringAMQP去收和发消息&#xff0c;但是发和收消息是只是MQ最基本的功能了&#xff0c;在收发消息的过程中&#xff0c;会有很多的问题需要去解决&#xff0c;下面需要学习rabbitMQ的高级特性去解决 死信交换机&#xff1a;这个可以帮助我们实现消息的延迟的…

[office] excel求乘积的公式和方法 #媒体#笔记#经验分享

excel求乘积的公式和方法 本文首先给出两个常规的excel求乘积的链接&#xff0c;然后再例举了一个文字和数字在同一单元格里面的excel求乘积的公式写法。 excel求乘积的方法分为两种&#xff0c;第一种是直接用四则运算的*来求乘积&#xff0c;另外一种就是使用PRODUCT乘积函数…

【GO语言卵细胞级别教程】03.条件与循环语句

注意&#xff1a;以下演示所用的项目&#xff0c;在第一章节已经介绍了&#xff0c;这里不做赘述 目录&#xff1a; 【GO语言卵细胞级别教程】03.条件与循环语句1.条件语句1.1 if语句1.1.1 单层if语句1.1.2 if-else语句1.1.3 if-else-if 语句1.1.4 if 嵌套 1.2 switch 语句1.1…

[论文精读]Community-Aware Transformer for Autism Prediction in fMRI Connectome

论文网址&#xff1a;[2307.10181] Community-Aware Transformer for Autism Prediction in fMRI Connectome (arxiv.org) 论文代码&#xff1a;GitHub - ubc-tea/Com-BrainTF: The official Pytorch implementation of paper "Community-Aware Transformer for Autism P…

Python解决SSL不可用问题

参考&#xff1a;https://blog.csdn.net/weixin_44894162/article/details/126342591 一、问题描述&#xff1a; 报错概述&#xff1a; WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. ## 警告:pip配…

空气质量预测 | Matlab实现基于BP神经网络回归的空气质量预测模型

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 政府机构使用空气质量指数 (AQI) 向公众传达当前空气污染程度或预测空气污染程度。 随着 AQI 的上升,公共卫生风险也会增加。 不同国家有自己的空气质量指数,对应不同国家的空气质量标准。 基于BP(Backpropag…

微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站https://www.captainbed.cn/kitie。 目录 前言 通过代码实现限流 定义资源 通过代码定义资源 通过注解方式定义资源 定义限流规则 通过…

反序列化漏洞——PHP原生类

Error类 PHP>7.0&#xff0c;因为存在__toString&#xff0c;可以进行XSS Exception类 因为存在__toString&#xff0c;可以进行XSS DirectoryIterator类 因为存在__toString&#xff0c;可以获取符合要求的第一个文件名 SplFileObject类 因为存在__toString&#xff0c…

深入浅出:Golang的Crypto/SHA256库实战指南

深入浅出&#xff1a;Golang的Crypto/SHA256库实战指南 介绍crypto/sha256库概览主要功能应用场景库结构和接口实例 基础使用教程字符串哈希化文件哈希化处理大型数据 进阶使用方法增量哈希计算使用Salt增强安全性多线程哈希计算 实际案例分析案例一&#xff1a;安全用户认证系…

缺省参数(c++)

void fun(int a0) { cout<<a<<endl; } 当我们调用函数时: fun(10) 输出10; fun&#xff08;&#xff09; 未传参时&#xff1a; 输出0; 未传参时a就会接受0&#xff0c;相当于这个0就是“备胎” 传参了0就没有用 全缺省 void fun2(int a10,int b3,int…

力扣刷题之旅:进阶篇(六)—— 图论与最短路径问题

力扣&#xff08;LeetCode&#xff09;是一个在线编程平台&#xff0c;主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目&#xff0c;以及它们的解题代码。 --点击进入刷题地址 引言 在算法的广阔天地中&#xff0c;图论是一个非常重要的领域。…

【开源】JAVA+Vue+SpringBoot实现实验室耗材管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…