学学习网 手机版

学学习网

学习路径: 学习首页 > 应用开发 > c++ >

第五节 数组 (Arrays)(3)

设置字体:
----------------------------------

在函数的声明中也包含多维数组参数。定义一个3维数组 (tridimensional array) 的形式是:
base_type[ ][depth][depth]
例如,一个函数包含多维数组参数的函数可以定义为:
void procedure (int myarray[ ][3][4])
注意第一对括号[ ]中为空,而后面两对不为空。这是必须的,因为编译器必须能够在函数中确定每一个增加的维度的深度。
数组作为函数的参数,不管是多维数组还是简单数组,都是初级程序员容易出错的地方。建议阅读章节3.3, 指针(Pointers),以便更好的理解数组(arrays)是如何操作的。
 
 
5.2 字符序列 Character Sequences
前面基础知识部分讲C++变量类型的时候,我们已经提到过C++的标准函数库提供了一个string类来支持对字符串的操作。然而,字符串实际就是一串连续的字符序列,所以我们也可以用简单的字符数组来表示它。
例如,下面这个数组:
char jenny [20];
是一个可以存储最多20个字符类型数据的数组。你可以把它想象成:

理论上这数组可以存储长度为20的字符序列,但是它也可以存储比这短的字符序列,而且实际中常常如此。例如,jenny 在程序的某一点可以只存储字符串"Hello" 或者"Merry christmas"。因此,既然字符数组经常被用于存储短于其总长的字符串,就形成了一种习惯在字符串的有效内容的结尾处加一个空字符(null character)来表示字符结束,它的常量表示可写为0 或'\0'。
我们可以用下图表示jenny (一个长度为20的字符数组) 存储字符串"Hello" 和"Merry Christmas" :

注意在有效内容结尾是如何用空字符null character ('\0')来表示字符串结束的。 后面灰色的空格表示不确定数值。
 
初始化以空字符结束的字符序列(Initialization of null-terminated character sequences)
因为字符数组其实就是普通数组,它与数组遵守同样的规则。例如,如果我们想将数组初始化为指定数值,我们可以像初始化其它数组一样用:
char mystring[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
在这里我们定义了一个有6个元素的字符数组,并将它初始化为字符串Hello 加一个空字符(null character '\0')。
除此之外,字符串还有另一个方法来进行初始化:用字符串常量。
在前几章的例子中,字符串常量已经出现过多次,它们是由双引号引起来的一组字符来表示的,例如:
"the result is: "
是一个字符串常量,我们在前面的例子中已经使用过。
与表示单个字符常量的单引号(')不同,双引号 (")是表示一串连续字符的常量。由双引号引起来的字符串末尾总是会被自动加上一个空字符 ('\0') 。
因此,我们可以用下面两种方法的任何一种来初始化字符串mystring:
char mystring [ ] = { 'H', 'e', 'l', 'l', 'o', '\0' };
char mystring [ ] = "Hello";
在两种情况下字符串或数组mystring都被定义为6个字符长(元素类型为字符char):组成Hello的5个字符加上最后的空字符('\0')。在第二种用双引号的情况下,空字符('\0')是被自动加上的。
注意:同时给数组赋多个值只有在数组初始化时,也就是在声明数组时,才是合法的。象下面代码现实的表达式都是错误的:
mystring = "Hello";
mystring[ ] = "Hello";
mystring = { 'H', 'e', 'l', 'l', 'o', '\0' };
因此记住:我们只有在数组初始化时才能够同时赋多个值给它。其原因在学习了指针(pointer)之后会比较容易理解,因为那时你会看到一个数组其实只是一个指向被分配的内存块的常量指针(constant pointer),数组自己不能够被赋予任何数值,但我们可以给数组中的每一个元素赋值。
在数组初始化的时候是特殊情况,因为它不是一个赋值,虽然同样使用了等号(=) 。不管怎样,牢记前面标下画线的规则。
 
给字符序列的赋值
因为赋值运算的lvalue 只能是数组的一个元素,而不能使整个数组,所以,用以下方式将一个字符串赋给一个字符数组是合法的:
mystring[0] = 'H';
mystring[1] = 'e';
mystring[2] = 'l';
mystring[3] = 'l';
mystring[4] = 'o';
----------------------------------
课程列表
重点难点
赞助链接