C++ Primer Plus笔记: 2023.06.21

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( )。该函数有两个参数,第一个是用来存储输入行的数组名,第二个是要读取的字符数。在读取指定数目的字符或遇到换行符时停止读取

你可能感兴趣的:(C++,Primer,Plus,c++)