逆向基础 C++ Primer Plus 第四章 复合类型(1)

逆向基础 C++ Primer Plus 第四章 复合类型(1)

知识点梳理

上一篇文章主要学习了C++的基本数据类型:整型和浮点型,今天就在此基础上学习复合类型:数组、字符串和结构。数组可以在一个数据对象中存储多个同种类型的值,通过使用索引或下标来访问每一个数组元素。结构可以将多个不同类型的值存储在同一个数据对象中,可以使用成员关系运算符(.)来访问其中的成员。

重点知识回顾

数组类型

数组之所以被称为复合类型,是因为它是使用其他类型来创建的,有些类似C语言中的派生类型,数组的声明中必须包含:类型、数组名和元素个数,数组的初始化只有在定义数组时才能使用,此后就不可以初始化了,当然也不能将一个数组赋值给另一个数组,可以使用下标分别给数组中的元素赋值,初始化时提供的值可以少于数组的元素个数,但一定不能多于数组的元素个数,其他没有赋值的部分编译器会自动设置为0,因此将数组中所有的元素初始化为0非常简单,只要显示地将第一个元素初始化为0即可。

long totals[100] = {0};
字符串类型

字符串是存储在内存的连续字节中的一系列字符,C++处理字符串的方式由两种:C风格字符串的方法和基于string类库的方法。C风格字符串可以理解为char类型的数组,但其于一般char类型数组的不同之处在于数组中最后一个元素为空,即以空字符('\0')结尾,其ASCII码为0,用来标记字符串的结尾。C++中字符常量使用单引号标记,字符串常量使用双引号标记,字符常量(如'S')是字符串编码的简写表示,'S'对应的ASCII为83,而字符串常量(如"S")表示的是两个字符(字符S和\0)组成的字符串,且"S"实际上表示的是字符串所在的内存地址。
字符串的输入函数:getline()和get(),getline()函数读取整行,其使用通过回车键输入的换行符来确定输入结尾,但不保存换行符,当在存储字符串时,getline()用空字符来替换换行符,而get()并不再读取并丢弃换行符,而是将其留在输入队列中。如下代码中如果输入年份的整型信息之后,将回车键生成的换行符留在了输入队列中,后面的cin.getline()看到换行符后,将认为是一个空行,并将一个空字符串赋值给address数组,解决的方法就是在cin >> year()后面加一行cin.get()在读取地址之前先读取并丢弃换行符。

#include <iostream>
int main()
{
    using namespace std;
    cout << "What year was your house built?\n";
    int year;
    cin >> year;
    cout << "What is its street address?\n";
    char address[80];
    cin.getline(address,80);
    cout << "Year built: " << year << endl;
    cout << "Address: " << address << endl;
    cout << "Done!\n";
    return 0;
}

ISO/ANSI C++98标准通过添加string类扩展了C++库,即可以用string类型的变量来存储字符串,与使用char数组表示字符串相比,使用string对象更加方便、安全,可以便捷的进行初始化、赋值、拼接、复制等操作。

结构类型

C++中的结构是一个灵活的数据格式,同一个结构可以存储多种类型的数据,但所有元素的类型必须相同,创建结构包含两步:定义结构描述(即声明能够存储在结构中的各种数据类型)和描述创建结构变量(结构数据对象),如下为定义结构inflatable的描述:

struct inflatable
{
    char name[20];
    float volume;
    double price;
};

其中inflatable是结构的名称,其包含char数组、float类型的变量volume和double类型变量price,定义结构后,就可以创建这种类型的变量了:

inflatable hat;

在调用结构中的具体某个变量时,利用类似hat.name[1]的格式即可,结构可以作为参数传递给函数,也可以让函数返回一个结构,同时结构支持赋值运算,即将一个结构赋值给另一个同类型的结构,即使结构中的成员包含数组,也支持赋值运算。
转载声明:如果希望转载请于公众号(安全fun)后台联系,或者邮件至anquanfun@163.com,转载时请保留原作者及出处信息,转载文章禁止声明原创,更多合作也可邮件至anquanfun@163.com。

免责声明:本公众号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值