等效形式 a[i],*(pa+i),pa[i]都是等效的
函数指针的定义 存储类型 数据类型(*函数指针名)(); 含义 函数指针指向的是程序代码存储区
典型用途:实现函数回调 通过函数指针调用的函数 将函数指针作为参数传递给一个函数 调用者不关心谁是被调用者
类名 *对象指针名; 通过指针访问对象成员 对象指针名->成员名 this 指针 隐含于每一个非静态成员函数中 指出成员函数所操作对象 return x相当于 return this->x
动态申请内存操作符 New new 类型名T(初始化参数列表) 在程序执行期间 申请用于存放T类型对象的内存空间 并依初值列表赋以初值 结果: 成功:T类型的指针 指向新分配的内存 失败:抛出异常
释放内存操作符 delete delete 指针p 释放指针p所指向的内存 p必须是new操作的返回值
分配:new 类型名T[数组长度] 释放:delete[]数组名P:删除整个对象数组 p必须是用new分配得到的数组首地址
更简洁 可在访问数组元素前检查下标是否越界 为什么element函数返回对象的引用 返回“引用”可以用来操作封装数组对象内部的数组元素 若返回值只是返回一个副本 通过副本无法操作原来数组中元素
此外还有智能指针
为何需要
封装任何类型的动态数组 自动创建和删除数组下标越界检查 使用对数组元素的引用 vector对象名[下标表达式]
获得数组长度 用size函数 vector对象名.size()
浅层复制 实现对象间数据元素的一一对应复制 深层复制 移动构造 只需移动 没必要复制 临时对象被复制后就不再被利用 可以把临时对象的资源直接移动 避免多余复制 移动构造函数 字符串常量 各字符连续顺序存放 每个字符占一字节 **“\0”**结尾 相当于一个隐含创建的转字符常量数组 “program”出现在表达式中 表示这一char数组的首地址 首地址可以赋给char常量指针 const char *STRING1=“program”;
用字符数组存字符串 的缺点 执行连接拷贝时 都需要显式调用库函数 字符串长度很不确定时 要用new动态创建字符数组 最后用delete释放 字符串实际长度大于为它分配的空间时 会产生数组下标越界的错误
string()//默认构造函数 建立一个长度为0的串 string(const char *s)//用指针s所指向的字符串常量初始化string对象 string(const string& rhs)//复制构造函数 s+t 将串s和t连接成一个新串 s=t 用t更新s
输入整行字符串 getline可以输入整行字符串(要包string头文件) 输入字符串时 可以使用其他分隔符作为字符串结束的标志 将分隔符作为getline的第三个参数即可