变量
声明
int InputNum;
初始化
int InputNum = 0;
声明和初始化多个类型相同的变量
int FristNum = 0,SecondNum = 1,ThirdNum = 2;
bool
bool isTrue = true;
bool isFalse = false;
char
char content_input = "Y"
按照美国信息交换标准(ASCII)对拉丁字符AZ、az、数字0~9、一些特殊键击(如DEL)和一些特殊字符(如空格)的数字进行了标准化,"Y"的ASCII码是89,所以编译器会在分配给content_input的内存空间中存储89.
有符号整数和无符号整数
计算机中所有的数字都以位和字节的方式存储在内存中。1个字节的内存单元包含8位,每位要么为0,要么为1,因此1个字节内存单元可以有2的8次方即256个不同的取值。同样2个字节的内存单元可以有2的16次方即65536个不同的取值。
如果是无符号的,1个字节的取值为0 ~ 255,2个字节的取值为0 ~ 65535.如果是有符号的,1个字节的取值为-127 ~ 127,2个字节的取值为-32768 ~ 32768.
如何表示有符号和无符号呢?一种方式就是将1位作为符号位,指出其他位包含的值是正还是负。这种方式下,符号位必须是最高有效位,假定0表示正,1表示负,其他位包含绝对值。
如何书写无符号整型呢?一般在类型前面添加unsigned。常见的有符号整型 short 、int 、long 、long long。无符号整型 unsigned short、unsigned int、unsigned long和unsigned long long。
注意:如果预期变量的取值不会有负数,就应该将其类型声明为无符号的。因此,如果您要存储苹果的数量,不要使用int变量,而应使用unsigned int变量。
无符号整型变量的环绕
#include <iostream>
using namespace std;
int main() {
unsigned short test = 0;
test = test -1;
cout<< test <<endl;
return 0;
}
65535
unsigned short的取值范围是0~65535,当值为0时-1,会导致变量值变为65535,出现值的环绕。如果变量是作为索引使用,出现环绕很可能导致越界,导致程序崩溃,所以要确保变量的取值如果可能为负时,就不应该使用unsigned short、unsigned int、unsigned long。
浮点类型 float double
float Pi = 3.14
double MorePi = 22/7
sizeof
使用sizeof确定变量的长度,所谓变量的长度指的是程序员声明变量时,编译器将预留多少内存,用于存储赋给该变量的数据
cout<< sizeof(int) <<endl;
4
C++11 auto
在C++11中可以不显示的指明变量的类型,而是把任务交给编译器,编译器根据值确定变量的类型。用以下示例简单介绍下auto,后面还会用单独讲解C++11的新特性。
auto auto_test = 5;
cout<< sizeof(auto_test) <<endl;
4
auto_test被推荐为int类型。
注意:使用auto时必须对变量进行初始化,因为编译器需要根据初始值来确定变量的类型。
typedef
C++允许将变量的类型替换为我们认为方便的名称,为此可使用关键字typedef。
#include <iostream>
using namespace std;
typedef unsigned int not_signed_int;
int main() {
not_signed_int auto_test = 5;
cout<< sizeof(auto_test) <<endl;
return 0;
}
当遇到not_signed_int时,编译器会用unsigned int替换not_signed_int。
常量
在C++中常量类似于变量,只是不可以修改。常量一般有以下几种,如字面常量、使用关键字const声明的变量、使用关键字constexpr声明的常量表达式、使用关键字enum声明的枚举变量、使用#define定义的常量。
字面常量
字面常量可以是任意类型,比如布尔型、整型、字符串等。
not_signed_int auto_test = 5;
cout<< "HelloWorld" <<endl;
以上示例中的整型5和字符串"HelloWorld"都是字面常量。
使用const将变量声明为变量
在变量前面增加const,就会使变量变为常量,常见格式:
const type-name constant-name;
举例说明:
const not_signed_int auto_test = 5;
cout<< auto_test <<endl;
此时auto_test称为了常量,其值不能再被修改。
注意:如果变量的值不应改变,就应通过使用关键字const将其声明为常量。
使用constexpr声明常量
#include <iostream>
using namespace std;
constexpr double GetPi(){
return 22.0/7;
}
constexpr double TwicePi(){
return GetPi() * 2;
}
int main() {
cout<< TwicePi() <<endl;
return 0;
}
constexpr提供了优化程序的可能性。constexpr将在编译阶段计算表达式的值,可以提高程序的运行速度。
枚举常量
在一些情况下,变量只能有一组特定的取值,比如🌈彩虹不能有其他颜色,方位只能有东南西北。所以在以上这种情况下,需要定义这样一种变量,即取值可以由我们指定。
enum RainbowColors
{
Violet = 0,
Indigo,
Blue,
Green,
Yellow,
Orange,
Red
};
RainbowColors myWorldColor = Blue;
cout<< myWorldColor <<endl;
2
定义了RainbowColors类型的变量myWorldColor,其取值只能是7个常量中的一个。另外声明枚举常量时,编译器将把枚举值转换为整数,每个枚举值都比前一个大1.可以指定起始值,如果没有指定,编译器认为初始值为0.
使用#define定义常量
#define定义常量,只是帮忙理解一些旧程序,现在编写新程序不要使用这种常量,如下述:
#define PI 5;
使用#define定义常量的做法已经摒弃。
总结
讲解了常量和变量,以及sizeof、#define、constexpr、typeof、auto的用法。