第三章 创建变量和常量
3.1变量是什么
变量是计算机内存中的一个位置,您可以在这里存储和检索值。变量有地址,并赋予了描述其用途的名称。
例如int zombies = 2;
其中zombies是变量名,2是其存储的变量值,但是它可能被放在了内存中的第101~104块,那么它的地址就是101~104(实际可能只显示头部地址)
c++创建变量时,须指定变量名称和类型,比如int a;
,数据类型用于指定变量所占用的最大空间(单位为字节)
基本数据类型:(因操作系统平台不同,长度可能会有所不同)
类型 | 长度(字节数) | 取值范围 |
---|---|---|
unsigned short | 2 | 0~65 535 |
short | 2 | -32 768~32 767 |
unsigned long | 4 | 0~4 294 967 295 |
long | 4 | -2 147 483 648~2 147 483 647 |
int | 4 | -2 147 483 648~2 147 483 647 |
unsigned int | 4 | 0~4 294 967 295 |
long long int | 8 | -9.2x101 ~9.2x101 |
char | 1 | 256个字符 |
bool | 1 | true或false |
float | 4 | 1.2e-38~3.4e38 |
double | 8 | 2.2e-308~1.8e308 |
其中须注意的是无符号数的长度虽然与有符号数的相同,但是从0开始
最特殊的是浮点数,浮点数的制定与其他的不同,它是依据IEEE754标准制定的,浮点表示法应该是一个programer掌握的最基本知识(以后会有深入理解计算机系统笔记,到时候会再行说明)
当然,c++也支持用户自定义的变量类型,比如用户定义的类或结构体。
要获取变量类型的长度,可使用sizeof()函数
程序清单3.1 Size.cpp
#include<iostream>
int main(){
std::cout<<"The size of an integer:\t\t";
std::cout<<sizeof(int)<<" bytes\n";
std::cout<<"The size of a short integer:\t";
std::cout<<sizeof(short)<<" bytes\n";
std::cout<<"The size of a long integer:\t";
std::cout<<sizeof(long)<<" bytes\n";
std::cout<<"The size of a character:\t";
std::cout<<sizeof(char)<<" bytes\n";
std::cout<<"The size of a boolean:\t\t";
std::cout<<sizeof(bool)<<" bytes\n";
std::cout<<"The size of a float:\t\t";
std::cout<<sizeof(float)<<" bytes\n";
std::cout<<"The size of a double float:\t\t";
std::cout<<sizeof(double)<<" bytes\n";
std::cout<<"The size of a long long int:\t\t";
std::cout<<sizeof(long long int)<<" bytes\n";
}
3.2定义变量
驼峰命名法:
对变量命名使用小驼峰命名法(首单词小写,其余单词首字母大写),如:newWroldRecord
对类名,名称空间使用大驼峰命名法(单词首字母均大写),如:DataBaseManager
除了驼峰命名法之外,没啥可记录的了。
3.3给变量赋值
赋值运算符: =
程序清单3.2 Rectangle.cpp
#include <iostream>
int main()
{
unsigned short width = 26, length;
length = 40;
unsigned short area = width * length;
std::cout << "Width: " << width << "\n";
std::cout << "Length: " << length << "\n";
std::cout << "Area: " << area << "\n";
return 0;
}
3.4类型定义
类型定义关键字:typedef
程序清单3.3 NewRectangle.cpp
#include <iostream>
int main()
{
typedef unsigned short USHORT;
USHORT width = 26;
USHORT length = 40;
USHORT area = width * length;
std::cout << "Width: " << width << "\n";
std::cout << "Length: " << length << "\n";
std::cout << "Area: " << area << "\n";
return 0;
}
3.5常量
常量值不会改变,且必须在创建常量时对其进行初始化。c++支持两种类型的常量:字面常量与符号常量
字面常量是直接在需要的地方输入的值
比如:long width = 19;
中,19就是字面常量,true与false也是字面常量。
符号常量是用名称表示的常量,与变量类型相似。声明符号常量时,需要使用关键字const,并在后面跟类型、名称和初值。
比如:const int KILL_BONUS = 5000;
也可定义常量,如:#define KILLBONUS 5000
,由于这种c式定义法没有指定类型,编译器无法确保其值是合适的,所以建议采用const关键字,而非使用编译指令进行常量定义。
枚举常量是在一条语句中创建一组常量,使用关键字enum定义,枚举值放在大括号里,之间逗号进行分隔。
比如:enmu Color {RED=100,BLUE,GREEN=500,WHITE,BLACK=700};
程序清单3.4 Compass.cpp
#include <iostream>
int main()
{
enum Direction
{
North,
Northeast,
East,
Southeast,
South,
Southwest,
West,
Northwest
};
Direction heading;
heading = Southeast;
std::cout << "Moving " << heading << std::endl;
return 0;
}
这里的输出结果是moving 3,原因是如果不进行显式初始化枚举常量,则枚举值从North开始默认为0,然后递增。
3.6自动变量
c++有一个关键字auto,可用于根据赋给变量的初值推断出变量的类型,该工作由编译器完成。
比如:auto rate=500/3.0
等价于double rate=500/3.0
程序清单3.5 Combat.cpp
#include <iostream>
int main()
{
auto strength = 80;
auto accuracy = 45.5;
auto dexterity = 24.0;
const auto MAXIMUM = 50;
auto attack = strength * (accuracy/MAXIMUM);
auto damage = strength * (dexterity/MAXIMUM);
std::cout<<"\nAttack rating: "<<attack<<"\n";
std::cout<<"Damage rating: "<<damage<<"\n";
return 0;
}
结果是:
Attack rating: 72.8 Damage rating: 38.4
如果上面这个程序您的编译器发出报错或警告,可能是您的编译器默认编译的c++版本在14以下,则使用以下编译命令尝试让编译器选择使用c++14进行编译:
g++ -std=c++14 Combat.cpp -o Combat.exe
(Linux下大同小异)