变量的声明

在 C++ 中,当我们需要使用一些事物时,需要进行声明(declare),来表明我们的程序中需要有该事物,以便能够使用它们。

int a;
float b = 12.3;
char c = 'a';
double d = 45.6;

代码中,如 intfloat 这样的单词后,跟了一个“标识符”,此即声明一个变量(variable);如同 int a; 这样的语句,就是声明了一个 int 类型的、名称为 a 的变量。顾名思义,变量的值可以变化。当然,我们也可以把变量的声明,理解成“声明用来存储信息的空间”,而具体存储什么类型的信息(以及以何种格式来读取信息),则由变量的类型决定。

在 C/C++ 中,一般应在变量声明时即赋予其一初始值,称为变量的初始化(initialization)。如果读取未初始化的变量,则可能会得到意料外的结果。

一般编程语言中,int 都代表 32 位带符号整型数,float 代表 32 位浮点数,char 用来存储字符,在 C/C++ 中长度为 8 位。关于这些基础变量类型(primitive types)具体的说明,这里暂时不展开介绍。

也有的编程语言不要求指明变量的类型,直接书写如同 a = 1.1 这样的语句,即可完成变量的声明以及赋值

当我们想要声明多个元素的空间时,除了声明多个变量,我们也可以声明一个变量的数组

// 声明多个变量
int a1, a2, a3; 

// 声明一个数组
int a[3]; // 数组 a 具有 3 个 int 的空间

// 声明一个数组并且赋初始值:
int b[3] = {1,2,3};

数组可以通过下标访问:a[0] 为数组的 0 号元素,也是数组的第 1 个元素(我们也将这称为“C/C++ 中的数组从 0 开始索引”)。在内存中,数组是一块连续的空间。我们会在之后介绍数组的相较于单独声明变量的好处。

同样,我们也可以声明出存储字符串的空间。顾名思义,字符串即一串字符,因此我们可以用字符的数组来存储一个字符串。

char str[6] = {'H','e','l','l','o','\0'};

上面的代码中,我们用 6 个 char 存储了一个单词“Hello”,以及一个用于标记字符串结束的“0 字符”——\0。“0 字符”的 ASCII 码为 0,所以我们也可以用数字 0 来表示“0 字符”。

C 语言中使用 0 字符来表示一个字符串的结束。当然,我们也可以在字符串的最开始,用一个数字来标记字符串的长度,这样便不需要特别的字符来标记字符串的终止了。

像下面这样的写法也是可以的,因为编译器可以帮我们自动推断存储字符串需要的空间。

char str[] = "Hello";

像上面两种,声明一个字符数组,并赋初值的方式在程序中存储的字符串,其内容是可以修改的。但是,我们需要注意,在修改时,所使用的空间,不能超过字符数组本身的大小。为此,一般我们会根据情况,选择声明一个较大的字符数组。

char str[100] = "Hello";

以上的方式,称为 C(语言)风格的字符数组。

我们也可以声明其他类型的变量,通常这些变量由其他库提供,亦可由用户自行设计定义。

比如,C++ 中一般使用 std::string 类型存储字符串。这种类型内部采用了动态内存分配等设计方式,我们尽可以放心的进行字符串的操作,而不用担心超出预先分配的空间。此外,得益于 C++ 中的运算符重载,+ 号也可以用于 std::string 类型,表示两个字符串的拼接。

string interj = "Hello";
string name = "Tom";
string sentence = interj + ", " + name + "!";
cout << sentence; // 输出 Hello, Tom!