使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。
您可能需要存储各种数据类型的信息,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么。
基本的内置类型
C++ 为程序员提供了种类丰富的内置数据类型和用户自定义的数据类型。下表列出了七种基本的
类型 | 关键字 |
---|
布尔型 | bool |
---|
字符型 | char |
---|
整形 | int |
---|
浮点型 | float |
---|
双浮点型 | double |
---|
无类型 | void |
---|
一些基本类型可以使用一个或多个类型修饰符进行修饰:
下表显示了各种变量类型在内存中存储值时需要占用的内存,以及该类型的变量所能存储的最大值和最小值。
注意:不同系统会有所差异,一字节为 8 位。
注意:long int 8 个字节,int 都是 4 个字节,早期的 C 编译器定义了 long int 占用 4 个字节,int 占用 2 个字节,新版的 C/C++ 标准兼容了早期的这一设定。
类型 | 位 | 范围 |
---|
char | 1 个字节 | -128 到 127 或者 0 到 255 | unsigned char | 1 个字节 | 0 到 255 | signed char | 1 个字节 | -128 到 127 | int | 4 个字节 | -2147483648 到 2147483647 | unsigned int | 4 个字节 | 0 到 4294967295 | signed int | 4 个字节 | -2147483648 到 2147483647 | short int | 2 个字节 | -32768 到 32767 | unsigned short int | 2 个字节 | 0 到 65,535 | signed short int | 2 个字节 | -32768 到 32767 | long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | signed long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | unsigned long int | 8 个字节 | 0 到 18,446,744,073,709,551,615 | float | 4 个字节 | 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字) | double | 8 个字节 | 双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字) | long double | 16 个字节 | 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。 | wchar_t | 2 或 4 个字节 | 1 个宽字符 |
从上表可得知,变量的大小会根据编译器和所使用的电脑而有所不同。
下面实例会输出您电脑上各种数据类型的大小。
#include<iostream>
#include <limits>
using namespace std;
int main()
{
cout << "type: \t\t" << "************size**************"<< endl;
cout << "bool: \t\t" << "所占字节数:" << sizeof(bool);
cout << "\t最大值:" << (numeric_limits<bool>::max)();
cout << "\t\t最小值:" << (numeric_limits<bool>::min)() << endl;
cout << "char: \t\t" << "所占字节数:" << sizeof(char);
cout << "\t最大值:" << (numeric_limits<char>::max)();
cout << "\t\t最小值:" << (numeric_limits<char>::min)() << endl;
cout << "signed char: \t" << "所占字节数:" << sizeof(signed char);
cout << "\t最大值:" << (numeric_limits<signed char>::max)();
cout << "\t\t最小值:" << (numeric_limits<signed char>::min)() << endl;
cout << "unsigned char: \t" << "所占字节数:" << sizeof(unsigned char);
cout << "\t最大值:" << (numeric_limits<unsigned char>::max)();
cout << "\t\t最小值:" << (numeric_limits<unsigned char>::min)() << endl;
cout << "wchar_t: \t" << "所占字节数:" << sizeof(wchar_t);
cout << "\t最大值:" << (numeric_limits<wchar_t>::max)();
cout << "\t\t最小值:" << (numeric_limits<wchar_t>::min)() << endl;
cout << "short: \t\t" << "所占字节数:" << sizeof(short);
cout << "\t最大值:" << (numeric_limits<short>::max)();
cout << "\t\t最小值:" << (numeric_limits<short>::min)() << endl;
cout << "int: \t\t" << "所占字节数:" << sizeof(int);
cout << "\t最大值:" << (numeric_limits<int>::max)();
cout << "\t最小值:" << (numeric_limits<int>::min)() << endl;
cout << "unsigned: \t" << "所占字节数:" << sizeof(unsigned);
cout << "\t最大值:" << (numeric_limits<unsigned>::max)();
cout << "\t最小值:" << (numeric_limits<unsigned>::min)() << endl;
cout << "long: \t\t" << "所占字节数:" << sizeof(long);
cout << "\t最大值:" << (numeric_limits<long>::max)();
cout << "\t最小值:" << (numeric_limits<long>::min)() << endl;
cout << "unsigned long: \t" << "所占字节数:" << sizeof(unsigned long);
cout << "\t最大值:" << (numeric_limits<unsigned long>::max)();
cout << "\t最小值:" << (numeric_limits<unsigned long>::min)() << endl;
cout << "double: \t" << "所占字节数:" << sizeof(double);
cout << "\t最大值:" << (numeric_limits<double>::max)();
cout << "\t最小值:" << (numeric_limits<double>::min)() << endl;
cout << "long double: \t" << "所占字节数:" << sizeof(long double);
cout << "\t最大值:" << (numeric_limits<long double>::max)();
cout << "\t最小值:" << (numeric_limits<long double>::min)() << endl;
cout << "float: \t\t" << "所占字节数:" << sizeof(float);
cout << "\t最大值:" << (numeric_limits<float>::max)();
cout << "\t最小值:" << (numeric_limits<float>::min)() << endl;
cout << "size_t: \t" << "所占字节数:" << sizeof(size_t);
cout << "\t最大值:" << (numeric_limits<size_t>::max)();
cout << "\t最小值:" << (numeric_limits<size_t>::min)() << endl;
cout << "string: \t" << "所占字节数:" << sizeof(string) << endl;
// << "\t最大值:" << (numeric_limits<string>::max)() << "\t最小值:" << (numeric_limits<string>::min)() << endl;
cout << "type: \t\t" << "************size**************"<< endl;
return 0;
}
typedef 声明
您可以使用?typedef?为一个已有的类型取一个新的名字。下面是使用 typedef 定义一个新类型的语法:
typedef type newname;
例如,下面的语句会告诉编译器,feet 是 int 的另一个名称:
typedef int feet;
现在,下面的声明是完全合法的,它创建了一个整型变量 distance:
feet distance;
枚举类型
枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。
如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。
创建枚举,需要使用关键字?enum。枚举类型的一般形式为:
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数]
} 枚举变量;
如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始。
例如,下面的代码定义了一个颜色枚举,变量 c 的类型为 color。最后,c 被赋值为 "blue"。
enum color { red, green, blue } c;
c = blue;
默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。例如,在下面的枚举中,green?的值为 5。
enum color { red, green=5, blue };
在这里,blue?的值为 6,因为默认情况下,每个名称都会比它前面一个名称大 1,但 red 的值依然为 0。
常量与变量
常量与符号常量
在程序运行过程中,其值不能被改变的量叫常量
常量也分为不同类型
- 整型常量 12 0 -3
- 实型常量 4.6 -1.23
- 字符常量 ‘a’ ‘d’
#include<iostream>
#define PRICE 30
using namespace std;
int main()
{
??????? int num=10,total=num*PRICE;
??????? printf("total=%d\n",total);
}
total=300
如果给PRICE赋值会出现错误
?习惯上,符号常量名用大写,变量名用小写,以示区别
好处
?当然,用cout语句,可以更简洁
#include<iostream>
#define PRICE 40
using namespace std;
int main()
{
??????? int num=10,total=num*PRICE;
??????? cout<<"total="<<total;
}
变量
变量代表内存中具有特定属性的一个存储单元,它用来存放数据,也就是变量的值,在运行期间,这些值可以被改变,一个变量应有它的名字,以便被引用,请注意区分变量名与变量值这两个不同的概念
?
?变量名只能由字母、数字与下划线构成
如:sum,average,_total,Class,i3
不合法:Hexiang.Zhang,!@#,3d64,a=b+1
注意,编译系统把大小写字母认为是两个不同的字符,Class与class完全不一样,命名尽量做到“见名知意”,一定要“先定义,后使用”,这样做的目的如下
(1)凡是未被先定义的,系统不把它认作是变量名,这就能保证变量名使用的正确
int student;错写成stadent=30;会编译出stadent未被定义,不作为变量名,因此编译出以下结果(2)每一个变量被指定一个确定类型,在编译时就能为其分配相应的存储单元
(3)指定每一变量属于一个存储类型,这样便能检测运算是否合法
|