《C++ primer plus》学习笔记——第四章

版权声明:共同提高:) https://blog.csdn.net/u011436427/article/details/83048701

一、数组
数组的申明应该注意以下三点:
1)存储在每个元素中的值的类型
2)数组名
3)数组中的元素数

创建数组
在这里插入图片描述

eg:

// hexoct2.cpp -- display values in hex and octal
#include <iostream>
#include<stdlib.h>
using namespace std;
int main()
{
    using namespace std;
    int yams[3];    // creates array with three elements
    yams[0] = 7;    // assign value to first element
    yams[1] = 8;
    yams[2] = 6;

    int yamcosts[3] = {20, 30, 5}; // create, initialize array
// NOTE: If your C++ compiler or translator can't initialize
// this array, use static int yamcosts[3] instead of
// int yamcosts[3]

    cout << "Total yams = ";
    cout << yams[0] + yams[1] + yams[2] << endl;
    cout << "The package with " << yams[1] << " yams costs ";
    cout << yamcosts[1] << " cents per yam.\n";
    int total = yams[0] * yamcosts[0] + yams[1] * yamcosts[1];
    total = total + yams[2] * yamcosts[2];
    cout << "The total yam expense is " << total << " cents.\n";

    cout << "\nSize of yams array = " << sizeof yams;
    cout << " bytes.\n";
    cout << "Size of one element = " << sizeof yams[0];
    cout << " bytes.\n";

	system("pause");
    return 0; 
}

在这里插入图片描述

说明:
1)C++允许在申明语句中初始化数组元素,程序给yam的元素赋值时,绕了一个大弯
2)sizeof运算符返回类型或数据对象的长度(单位为字节),注意,如果将sizeof运算符用于数组名,得到的将是整个数组中的字节数,但是如果将sizeof用于数组元素,则得到的将是元素的长度(单位为字节)。这表明yams是一个数组,而yams[1]只是一个int变量

2.数组的初始化规则
C++11使用大括号额初始化(列表初始化)作为一种通用初始化方式,可用于所有类型
1)定义数组时的初始化
eg:
在这里插入图片描述
2)初始化数组时,提供的值可以少于数组的元素数目
在这里插入图片描述
3)只对数组的一部分进行初始化,则编译器将把其它元素设置为0
在这里插入图片描述

如果初始化为{1}而不是{0},则第一个元素被设置为1,其它元素都被设置为0

4)如果初始化数组时,方括号内([])为空,C++编译器将计算元素个数

在这里插入图片描述

如果主要关心的问题是程序,而不是自己是否知道数组的大小,则可以这样去做:
在这里插入图片描述

3.C++11数组初始化的方法

C++11中的列表初始化新增了一些功能
1)初始化数组时,可省略等号(=)
在这里插入图片描述

2)可不在大括号内包含任何东西,这会将所有元素都设置为0
在这里插入图片描述

3)列表初始化禁止缩窄转换(格式转换)
在这里插入图片描述

上述代码中,
第一条语句不能通过编译,因为将浮点数转换为整型是缩窄操作,即使浮点数的小数点后面为零
第二条语句也不能通过编译,因为1122011超出了char变量的取值范围
第三条语句可通过编译,因为虽然112是一个int值,但它在char变量的取值范围内

二、字符串
C++处理字符串的方式有两种,第一种来自C语言,第二种是基于string类库的方法

eg:
在这里插入图片描述

这两个数组都是char数组,但是只有第二个数组是字符串。
‘\0’是空字符
如果使用cout显示上面的cat这样的字符串,则将显示前7个字符,发现空字符后停止。
如果使用cout显示上面的dog数组(他不是字符串),cout将打印数组中的8个字母,并接着将内存中随后的各个字节解释为要打印的字符,直到遇到空字符为止。

注意:在cat数组中,将数组初始化为字符串的工作看起来冗长乏味,使用了大量单引号,且必须记住加上空字符

将字符数组初始化为字符串的方法——只需使用一个用引号括起来的字符串即可,这种字符串被称为字符串常量string constant
在这里插入图片描述

注意,用括号括起来的字符串隐式地包括结尾的空字符,因此,不用显示地包括它。
另外,各种C++输入工具通过键盘输入,将字符串读入到char数组中的时候,会将自动加上结尾的空字符。
在这里插入图片描述

让数组比字符串长没什么坏出,只是会浪费一些空间而已。这是因为处理字符串的函数根据空字符的位置,而不是数组长度来进行处理

注意:字符串常量字符常量不能互换
早ASCII系统上,‘S’只是83的另一种写法,因此,下面的语句将83赋值给shirt_size:
在这里插入图片描述

"S"不是字符常量,它表示的是两个字符(字符S和\0)组成的字符串。“S”实际上表示的是字符串所在的内存地址,因此下面的语句试图将一个内存地址赋给shirt_size,这个是不行的
在这里插入图片描述

1.拼接字符串常量

猜你喜欢

转载自blog.csdn.net/u011436427/article/details/83048701