概述
声明:本文内容参考www.runoob.com网站C++版块,部分内容有摘抄。
1.数据类型
编程时,我们需要各种变量来对应地储存各种数据(信息)。变量保留的是它所存储的值的内存位置。这意味着,当创建一个变量时,就会在内存中保留一些空间。常见的数据类型有字符型、宽字符型、整型、浮点型、双浮点型、布尔型等。
(1)基本的内置类型
类型 | 关键字 | 位数(范围) |
---|---|---|
布尔型 | bool | - |
字符型 | char | 1 个字节 |
- | unsigned char | 范围 0-255 |
- | signed char | 范围 -128 到 127 |
整型 | int | 4 个字节 |
- | unsigned int | 0 到 4294967295 |
- | signed int | -2147483648 到 2147483647 |
- | short int | 2 个字节 (-32768 到 32767) |
- | unsigned short int | 0 到 65,535 |
- | signed short int | -32768 到 32767 |
- | long int | 8 个字节(-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807) |
- | … | … |
浮点型 | float | 4 个字节(精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字)) |
双浮点型 | double | 8个字节(双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字)) |
- | long doublet | 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字 |
无类型 | void | - |
宽字符型 | wchar_t | 2 或 4 个字节(1 个宽字符) |
一些基本类型可以使用一个或多个类型修饰符进行修饰:
1) signed ——范围从负数计算
2)unsigned ——范围从0开始计算
3) short ——位数为原来的倍
4) long ——位数为原来的1/2
(2)typedef 声明
使用 typedef 为一个已有的类型取一个新的名字。下面是使用 typedef 定义一个新类型的语法:
typedef type newname;
例如,下面的语句会告诉编译器,zhengxing 是 int 的另一个名称:
typedef int zhengxing;
现在,下面的声明是完全合法的,它创建了一个整型变量 high:
zhengxing high;
(3)枚举声明
枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。
如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。
创建枚举,需要使用关键字 enum。枚举类型的一般形式为:
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数]
} 枚举变量;
如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始。
例如,下面的代码定义了一个颜色枚举,变量 c 的类型为 color。最后,c 被赋值为 “blue”。
enum color { red, green, blue } c;
c = blue;
2.C++ 变量类型与声明
变量其实只不过是程序可操作的存储区的名称。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。
变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C++ 是大小写敏感的。
C++ 也允许定义各种其他类型的变量,比如枚举、指针、数组、引用、数据结构、类等。
1)变量的定义
C++ 中有两种类型的表达式:
左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。
右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。
变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。下面是一个有效的语句:
int s = 10;
下面这个就不是一个有效的语句,会生成编译时错误:
10 = 20;
2)变量作用域
作用域是程序的一个区域,一般来说有三个地方可以定义变量:
a.在函数或一个代码块内部声明的变量,称为局部变量。
b.在函数参数的定义中声明的变量,称为形式参数。
c.在所有函数外部声明的变量,称为全局变量
3)常量
常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。
常量可以是任何的基本数据类型,可分为整型数字、浮点数字、字符、字符串和布尔值。
常量就像是常规的变量,只不过常量的值在定义后不能进行修改。
定义常量:
- #define 预处理器
- const 前缀声明指定类型的常量
存储类
C++ 程序中可用的存储类:
1. auto:C++ 17 开始,auto 关键字不再是 C++ 存储类说明符
2. register: 从 C++ 17 开始, register 关键字被弃用。
3. static:
static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。
static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。
4.extern:
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 ‘extern’ 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。
当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。
5.mutable:
mutable 说明符仅适用于类的对象。它允许对象的成员替代常量。也就是说,mutable 成员可以通过 const 成员函数修改。
6.thread_local (C++11):
使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。 变量在创建线程时创建,并在销毁线程时销毁。 每个线程都有其自己的变量副本。thread_local 说明符可以与 static 或 extern 合并。也可以将 thread_local 仅应用于数据声明和定义,thread_local 不能用于函数声明或定义。
最后
以上就是喜悦冬天为你收集整理的C++数据类型和变量的全部内容,希望文章能够帮你解决C++数据类型和变量所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复