05 在C++中,什么是变量?变量有哪些类型?

系列文章目录

在C++中,什么是变量?变量有哪些类型?


目录

系列文章目录

文章目录

前言

一、C++中的变量

1.什么是变量?

2.变量的类型

二、C++ 中的变量定义和声明

1.变量定义

2.变量声明

三、扩展

1.函数

2.自动转换规则

总结


前言

变量是一个可以存储数据值的容器。在C++中,每个变量都有一个数据类型,该类型决定了变量可以存储的数据类型和范围。


一、C++中的变量

1.什么是变量?

在C++中,变量是一个可命名的内存空间

变量可以存储不同类型的数据,并且可以在程序的不同部分使用。

每个变量都有唯一的标识符,称为变量名。它可以在程序中使用,以表示存储在内存中的值或对象。

变量的数据类型必须在声明时指定,以便编译器知道为该变量分配多少内存,并在必要时进行类型转换。

变量在程序运行期间可以被修改,其值可以被读取并用于执行计算。

2.变量的类型

在C++中,有以下基本数据类型:

1. 整型(int)
2. 字符型(char)
3. 布尔型(bool)
4. 浮点型(float)
5. 双精度浮点型(double)

此外,还有以下扩展数据类型:

1. 枚举型(enum)
2. 无符号整型(unsigned)
3. 长整型(long)
4. 短整型(short)
5. 常量(const)
6. 指针(pointer)
7. 引用(reference)

下面我们详细来看一些常见的类型: 

  1. 整数类型(Integer Types):

    • int:用于表示整数,通常占用4个字节。
    • short:用于表示短整数,通常占用2个字节。
    • long:用于表示长整数,通常占用4个字节。
    • long long:用于表示更长的整数,通常占用8个字节。
  2. 浮点类型(Floating-Point Types):

    • float:用于表示单精度浮点数,通常占用4个字节。
    • double:用于表示双精度浮点数,通常占用8个字节。
    • long double:用于表示更高精度的浮点数,占用字节数可以根据实现而变化。
  3. 字符类型(Character Types):

    • char:用于表示字符,通常占用1个字节。
    • wchar_t:用于表示宽字符,通常占用2或4个字节。
    • char16_t:用于表示16位Unicode字符,占用2个字节。
    • char32_t:用于表示32位Unicode字符,占用4个字节。
  4. 布尔类型(Boolean Type):

    • bool:用于表示布尔值,只能取truefalse
  5. 枚举类型(Enumeration Types):

    • enum:用于定义一组命名的整数常量。
  6. 指针类型(Pointer Types):

    • type*:用于表示指向类型为type的对象的指针。
  7. 数组类型(Array Types):

    • type[]type[size]:用于表示具有相同类型的元素组成的数组。
  8. 结构体类型(Structure Types):

    • struct:用于定义包含多个不同类型成员的结构。
  9. 类类型(Class Types):

    • class:用于定义具有属性和方法的自定义类型。
  10. 共用体类型(Union Types):

    • union:用于定义一种特殊的数据类型,它可以在相同的内存位置存储不同的数据类型。

二、C++ 中的变量定义和声明

1.变量定义

变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。

下面使用代码来说明: 

int a;
char  b;
float c;
double d;

上面的代码就表示定义了4种类型的4个变量;下面的代码表示变量在声明时进行了初始化;

不带初始化的定义,带有静态存储持续时间的变量会被隐式初始化为 NULL(所有字节的值都是 0),其他所有变量的初始值是未定义的。

int a = 1;
char  b = ‘b’;
float c = 1.0;

2.变量声明

  • 变量声明是向编译器保证变量以给定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。
  • 变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。
  • 当使用多个文件且只在其中一个文件中定义变量时,变量声明就显得非常有用。
  • 可以使用 extern 关键字在任何地方声明一个变量。虽然可以在 C++ 程序中多次声明一个变量,但变量只能在某个文件、函数或代码块中被定义一次。

下面来看看代码:

#include <iostream>
using namespace std;// 变量声明
extern int a, b;
extern int c;int main()
{// 变量定义int a, b;int c;// 实际初始化a = 10;b = 20;c = a + b;cout << c << endl;return 0;
}

代码输出为30;

注意,这里变量是先被声明了,然后在被定义和初始化的;

还有一点就是:定义包含了声明,但是声明不包含定义。函数也是一样。

三、扩展

1.函数

上面的代码,变量是先被声明了,然后在被定义和初始化的;同样的操作,对于函数也是适用的。

下面就是一个例子: 

// 函数声明
int Add();// 函数定义
int Add(int a, int b) {cout << a + b << endl;return 0;
}int main()
{// 变量定义int a, b;// 实际初始化a = 10;b = 20;Add(a, b);return 0;
}

输出结果是30;

2.自动转换规则

变量的类型间是可以互相转换的,转换又分为自动转换和强制转换。

自动转换类型:

  1. 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。
  2. 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。     a、若两种类型的字节数不同,转换成字节数高的类型     b、若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型
  3.  所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
  4. char型和short型参与运算时,必须先转换成int型。
  5.  赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度:

强制转换规则:

强制类型转换是通过类型转换运算来实现的。

其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型

int a = 1;
double b = 2.1;
cout << "a + b = " << a + (int)b << endl;   //输出为a + b = 3


总结

下面进行一些总结。在C++中,使用变量时需要注意以下主要事项:

  1. 声明变量:在使用变量之前,必须先声明该变量的类型和名称。

  2. 变量的初始化:变量可以在声明时进行初始化,也可以在后续的代码中进行初始化。对于未初始化的变量,其值是不确定的。

  3. 变量的类型:在使用变量时,需要明确变量的类型,这决定了变量能够存储的数据类型和所占用的内存空间大小。

最后,变量的使用还要注意变量的作用域,变量的作用域指的是变量在程序中可以被访问的范围。在C++中,变量可以有全局和局部作用域,需要根据需要来定义。这个我们会在后面讲到。

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

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

相关文章

accelerate的使用说明

1 多卡(GPU)使用方法 终端输入指令&#xff0c;生成问答页面 accelerate config 这个方法也是可以的 2 后面修改直接找到这个yaml文件进行修改即可 cd ~/.cache/huggingface/accelerate vim default_config.yaml 进入vim进行修改 3 单卡(GPU)使用方法 vim default_config.…

什么是SQL?

SQL和MySQL是当今计算机领域中非常重要的两个概念。SQL是关系型数据库的查询语言&#xff0c;而MySQL是一种关系型数据库管理系统。它们在数据存储、管理和查询方面发挥着巨大的作用。在本文中&#xff0c;我们将深入探讨SQL和MySQL的定义、功能、应用以及它们之间的联系。 一…

边缘计算网关:智能制造的“智慧大脑”

一、智能制造的崛起 随着科技的飞速发展&#xff0c;智能制造已经成为了制造业的新趋势。智能制造不仅能够提高生产效率&#xff0c;降低生产成本&#xff0c;还能够实现个性化定制&#xff0c;满足消费者多样化的需求。然而&#xff0c;智能制造的实现离不开大量的数据处理和分…

2023.11.25电商项目平台建设2 -四大业务之核销主题建模

1.数仓建模步骤 自下而上 ADS-DWS-DWM-DWD 2.DWD方案(清洗转换,降维拉宽) DWD层的表 dwd_sale_store_sale_dtl_i 门店销售明细宽表 维度dim 销售sale合成成的宽表 dwd_dim_date_f 日期表 store_sale_dtl 门店销售明细表 dwd_sale_store_sale_dtl_i 门店销售明细表 …

快速上手Banana Pi BPI-R4 MediaTek MT7988A 开源路由器开发板

基础开发 准备开发 * 准备8G以上TF卡、USB转串口线、Ubuntu系统* 使用 USB 串行电缆&#xff08;3.3V TTL&#xff0c;波特115200&#xff09;连接到 BPI-R4 上的调试控制台G接地&#xff1b;RXBPI-R4输入&#xff1b;TXBPI-R4输出* BPI-R4 引导程序和设备选择跳线设置* 例子…

【leetcode】62. 不同路径

题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff1f; …

基于SpringBoot的超市信息管理系

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着我国经济的不断发…

数据库日志解析:深入了解MySQL中的各类日志

**> &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 数据库日志解析&#xff1a;深入了解MySQL中的各类日志 前言第一&#xff1a;错误日志❌1. 错误日志的作用2. 记录内容3. 故障排查的方法 第二&#xff1a;查询日志1.…

【华为OD】B\C卷真题 100%通过:需要打开多少监控器 C/C++实现

【华为OD】B\C卷真题 100%通过&#xff1a;需要打开多少监控器 C/C实现 目录 题目描述&#xff1a; 示例1 代码实现&#xff1a; 题目描述&#xff1a; 某长方形停车场&#xff0c;每个车位上方都有对应监控器&#xff0c;当且仅当在当前车位或者前后左右四个方向任意一个…

【Linux】第二十站:模拟实现shell

文章目录 一、shell的实现细节1.shell的一些细节2.用户名、主机名、工作目录2.输入命令3.改为循环4.切割字符串5.普通命令的执行6.内建命令的处理7.子进程的退出码8.总结 二、模式实现shell完整代码 一、shell的实现细节 1.shell的一些细节 shell操作系统的一个外壳程序。 s…

笔记:pycharm当有多个plt.show()时候,只显示第一个plt.show()

import matplotlib.pyplot as plt import numpy as np# 创建数据 x np.linspace(0, 10, 100) y1 np.sin(x) y2 np.cos(x) y3 np.tan(x) y4 np.exp(x)# 创建一个2x2的子图网格 # fig plt.figure() fig,((ax1, ax2), (ax3, ax4)) plt.subplots(nrows2, ncols2, figsize(8,…

角色管理--创新产品专家岗

研发组织管理--角色管理--创新产品专家岗 定位 部门创新业务的牵头人&#xff0c;提升部门的创新氛围&#xff0c;业务的拓边者 所需资质 对当前业务范围和内容有整体的了解和认知较强的自驱力和推动能力&#xff0c;能够牵头推动协助方共同配合尝试创新落地拥有较强的0-1能…

【matlab程序】matlab画台风符号和实例应用

【matlab程序】matlab画台风符号和实例应用 没有看文献&#xff0c;不知道文献中的符号什么样子&#xff0c;据我理解为这样子的&#xff1a; 因此&#xff0c;按照自己的理解做了这期。 结果浏览&#xff1a; 台风符号一切可改&#xff0c;可细细改。可是我不发论文&#xf…

C 文件 ftell() 函数

C 文件 ftell() 函数 ftell()函数返回指定流的当前文件位置。将文件指针移到文件末尾后&#xff0c;我们可以使用ftell()函数获取文件的总大小。可以使用SEEK_END常量在文件末尾移动文件指针。 语法&#xff1a; long int ftell(FILE *stream)程序&#xff1a;ftell.c 示例…

Oracle 中的操作符

1.union:对两个结果集进行并集操作&#xff0c;不包括重复行&#xff0c;同时进行默认规则的排序&#xff1b; SELECT * FROM emp WHERE sal < 1500 UNION SELECT * FROM emp WHERE sal BETWEEN 1000 AND 2000 order by 1 2.union All&#xff1a;对两个结果集进行并集操…

[C/C++]数据结构 堆排序(详细图解)

一:前言 在[C/C]数据结构 堆的详解中,介绍了什么是堆,并且完成了堆的实现和一系列接口,包括向上调整法和向下调整法等,接下来小编介绍一个有点量级的排序方法------堆排序,时间复杂度为O(n*lgn) 二:堆排序详解 2.1 方法介绍 1.首先将待排序数组建为大堆,此时堆顶元素就为数组…

给国外客户价格报低了怎么办

前一段时间有一个单子的货发出去了&#xff0c;被朋友提醒才发现自己报错了价格&#xff0c;造成了亏损&#xff0c;而报错价格的原因并不是自己看错了或者是抄错了价格&#xff0c;而是自己的脑子里记错了产品的价格列表。 如果不是朋友善意的提醒&#xff0c;大概我会一直错…

【心得】XXE漏洞利用个人笔记

XML中关于DTD类型(内部(SYSTEM)的和外部(PUBLIC)的区别) xxe的利用 XML Entity 实体注入 当程序处理xml文件时&#xff0c;没有禁止对外部实体的处理&#xff0c;容易造成xxe漏洞 危害 主流是任意文件读取 XML 文件 一般表示带有结构的数据 祖父 3个叔父 8个堂弟堂妹 …

一对一连接MODBUS转PROFINET网关TS-182技术特点和主要参数

TS-182在PROFINET一端为从站&#xff0c;串口端是1个RS485接口&#xff0c;可以为Modbus主站/从站或连接其他自定义串口协议&#xff08;视具体的协议而定&#xff09;。即可连接1台RS485口设备到PROFINET主站。 产品特点&#xff1a; 1、配置方便&#xff1a;用户不必了解PRO…

python-opencv 人脸68点特征点检测

python-opencv 人脸68点特征点检测 不是很难&#xff0c;主要还是掉包&#xff0c;来看一下代码啊&#xff1a; # coding: utf-8 # 导包 import numpy as np import dlib import cv2class face_emotion(object):def __init__(self):# 人脸检测器对象&#xff0c;通过它拿到人…