变量的声明
在 C++ 中,当我们需要使用一些事物时,需要进行声明(declare),来表明我们的程序中需要有该事物,以便能够使用它们。
int a;
float b = 12.3;
char c = 'a';
double d = 45.6;
代码中,如 int
、float
这样的单词后,跟了一个“标识符”,此即声明一个变量(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!