1.关于代码风格,符号常量应该放在main( )的外面
2.声明数组的通用格式:
typeName arrayName[arraySize] ;
注意,arraySize不能是变量,可以是整型常数或const值,也可以是常量表达式。
2.编译器不会检查使用的下标是否有效。
3.如果没有初始化函数中定义的数组,则其元素值将是不确定的,这意味着元素的值为以前驻留在该内存单元的值。
4.如果将sizeof运算符用于数组名,得到的将是整个数组中的字节数,但如果将sizeof用于数组元素,则得到的将是数组的长度(单位为字节)。
5.只有在定义数组时才能使用初始化,以后就不能使用了,也不能将一个数组赋给另一个数组,如果像下面这样:
int cards[4] = {3, 6, 8, 10} ;
int hand[4] ;
hand[4] = {5, 6, 7, 9} ;
hand = cards ;
编译的后果:
nitialarray.cpp: In function ‘int main()’:
initialarray.cpp:8:23: error: cannot convert ‘<brace-enclosed initializer list>’ to ‘int’ in assignment
8 | hand[4] = {5, 6, 7, 9} ;
| ^
initialarray.cpp:9:9: error: invalid array assignment
9 | hand = cards ;
| ^~~~~
6.C++的列表初始化增加了一些新功能:
double earnings[4] {1.2e4, 1.6e4, 1.1e4, 1.7e4} ; //初始化数组时省略等号
unsigned int counts[10] = {} ; //不在大括号内包含任何东西,所有元素设成0
float balance[100] {} ;
但同时列表初始化禁止缩窄转换,否则会导致类似下面的编译错误:
newarray.cpp: In function ‘int main()’:
newarray.cpp:10:29: error: narrowing conversion of ‘3.0e+0’ from ‘double’ to ‘long int’ [-Wnarrowing]
10 | long plifs[] = {25, 92, 3.0} ;
| ^
newarray.cpp:11:39: error: narrowing conversion of ‘112201’ from ‘int’ to ‘char’ [-Wnarrowing]
11 | char slifs[4] {'h', 'i', 112201, '\0'} ;
| ^
7.不能将字符串等同于字符数组。C-风格字符串具有一种特殊的性质: 以空字符结尾,空字符被写做\0,其ASCII码为0,用来标记字符串的结尾,下面的两个字符串:
char dog[8] = {'b', 'e', 'a', 'u', 'x', ' ', 'I', 'I'} ;
char cat[8] = {'f', 'a', 't', 'e', 's', 's', 'a', '\0'} ;
只有数组cat能被称为字符串,对两个数组进行打印输出:
dog = beaux IIfatessa
cat = fatessa
在使用cout打印dog数组的时候,cout将打印数组中的8个字符,并接着将内存中随后遇到的各个字节解释为要打印的字符,直到遇到空字符为止。
8.注意,字符串常量(使用双引号)不能与字符常量(使用单引号)互换,下面的编译错误就可说明:
chararray.cpp: In function ‘int main()’:
chararray.cpp:6:20: error: invalid conversion from ‘const char*’ to ‘char’ [-fpermissive]
6 | char shirt_size = "S" ;
| ^~~
| |
| const char*
"S"实际上表示的是字符串所在的内存地址
9.C++允许拼接字符串字面值,即将两个用引号括起的字符串合并为一个。事实上,任何两个由空白(空格、制表符和换行符)分割的字符串常量都将自动拼接成一个。下面的输出语句都是等效的:
cout << "I'd give my right arm to be" " a great violinist.\n" ;
cout << "I'd give my right arm to be a great violinist.\n" ;
cout << "I'd give my right ar"
"m to be a great violinist.\n" ;
10.cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,这意味着cin在获取字符数组输入时只读取一个单词。读取该单词后,cin将该字符串放到数组中,并自动在结尾添加空字符。
但这样显然有缺陷,比如要读取城市名New York
11.面向行的输入: getline( )
getline( )函数读取整行,要调用这种方法,可以使用cin.getline( )。该函数有两个参数,第一个是用来存储输入行的数组名,第二个是要读取的字符数。在读取指定数目的字符或遇到换行符时停止读取