c++的准备知识17

1.C++11数组初始化方法。初始化数组时,可以省略等号:
  double earnings『4』 {1.2e4,1.6e4,1.1e4,1.5e4};
  其次,可以在大括号内包含任何东西,这将把所有元素都设置为零。
  unsigned int counts 『10』 = {};
  float balances『100』 {};
  第三,列表初始化禁止缩窄转换,
  long plifs 『』= {15,54,7};
  char slifs【4】 {"h","i",1122311,"\0"};
  char tlifs [4]  {"h""i",122"\0"};
  在上述代码中,第一条语句不能通过编译,因为将浮点数转换成整数时缩窄操作,及浮点数的小数点后面为零。
  第二条语句也不能通过编译,因为1122311超出了char 变量的取值范围。第三条可以通过编译,虽然112是一
  个int值但它在char变量的取值范围内。
  C++标准模板库提供了一种数组代替品——模板类vector,而C++11新增了模板类array。这些替代品比内置符合
  类型数组更复杂,更灵活。


2.字符串
  字符串是存储字内存的连续字节中的一系列字符,C++处理字符的方式有两种。第一种来自C语言,常被称为C-风
  格字符串。
  存储在连续字节中的一系列字符意味着可以将字符串存储在char数组中,其中每个字符都位于自己的数组元素中,
  字符串提供了一种存储文本信息的边界方式,如提供给用户的消息或来自用户的相应。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",};
  这两个数组都是char数组,但只有第二个数组是字符串。空字符对C-风格字符串而言至关重要。例如,C++有很多
  处理字符串的函数,其中包括cout使用的那些函数,他们都逐个的处理字符串中的字符,知道达到空格字符为止。
  如果使用cout显示上面的cat这样的字符串。则将显示前七个字符,发现空字符后停止。但是如果使用cout显示上
  面的dog数组,cout将打印出数组中的8个字母,并接着将内存中随后的各个字节解释为要答应的字符,知道遇到
  空字符为止,由于空字符在内存中很常见,因此,这一过程将很快停止。尽管如此,还是不应将不是字符串的字符
  数组当作字符串来处理。


3.在cat数组实例中将数组初始化为字符串的工作看上去冗长乏味--使用大量单引号,且必须集中加上空字符。但是有
  一种更好的,将字符数组初始化为字符串的方法--只需要使用一个引号括起的字符串即可,这种字符串被称为字符
  串常或字符串字面值,如;
  char bird【11】 = "Mr . cheeps ";
  char fish 【】 = “Bubbles”;
  用引号括起的字符串隐式的包括结尾的空字符,因此不用显式的包括他。
  C++输入工具通过键盘输入,将字符串读入到char 数组中时,将自动加上结尾的空字符。
  当然,应确保数组足够大,能够存储字符串中所有字符--包括空字符,使用字符串常量初始化字符数组是这样的一种
  情况,及让编译器计算元素数目更为安全,让数组比字符串长没有什么害处,只是会浪费一些空间而已。这是因为处理
  字符串的函数根据空字符的位置,而不是数组长度来进行处理。C++对字符串长度没有限制。
  不过在确定存储字符串所需的最短数组时,别忘了将结尾的空字符计算在内。
  注意,字符串常量不能与字符常量呼唤,字符常量是字符串编码的简写表示。在ASCII系统上,S只是83的另一种写法,
  因此下面的语句将83赋给shirt_size:
  char shirt_size = "S";
  但“S”不是字符常量,他表示的是两个字符组成的字符串,实际上S表示的是字符串所在地内存地址。因此下面的语句
  将试图将一个内存地址赋给shirt_size:
  char shirt_size = "S";
  由于地址在C++中山一种独立的类型,因此C++编译器不循序这种不合理的做法。

 

posted @ 2016-08-28 18:38  都是木头  阅读(181)  评论(0编辑  收藏  举报