C艹 7 指针

tech2025-07-06  3

定义指向数组元素的指针

等效形式 a[i],*(pa+i),pa[i]都是等效的

为什么用指针做参数

需要数据双向传递时需要传递一组数据 只传首地址运行效率比较高 在子函数中通过动态内存分配new操作取得的内存地址返回给主函数是合法有效的 但是内存分配和释放不在同一级别 注意不能忘记释放 避免内存泄露

指向函数的指针

函数指针的定义 存储类型 数据类型(*函数指针名)(); 含义 函数指针指向的是程序代码存储区

典型用途:实现函数回调 通过函数指针调用的函数 将函数指针作为参数传递给一个函数 调用者不关心谁是被调用者

对象指针

类名 *对象指针名; 通过指针访问对象成员 对象指针名->成员名 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对象

为何需要

封装任何类型的动态数组 自动创建和删除数组下标越界检查 使用

对数组元素的引用 vector对象名[下标表达式]

获得数组长度 用size函数 vector对象名.size()

对象的复制

浅层复制 实现对象间数据元素的一一对应复制 深层复制 移动构造 只需移动 没必要复制 临时对象被复制后就不再被利用 可以把临时对象的资源直接移动 避免多余复制 移动构造函数 字符串常量 各字符连续顺序存放 每个字符占一字节 **“\0”**结尾 相当于一个隐含创建的转字符常量数组 “program”出现在表达式中 表示这一char数组的首地址 首地址可以赋给char常量指针 const char *STRING1=“program”;

用字符数组存字符串 的缺点 执行连接拷贝时 都需要显式调用库函数 字符串长度很不确定时 要用new动态创建字符数组 最后用delete释放 字符串实际长度大于为它分配的空间时 会产生数组下标越界的错误

string类

string()//默认构造函数 建立一个长度为0的串 string(const char *s)//用指针s所指向的字符串常量初始化string对象 string(const string& rhs)//复制构造函数 s+t 将串s和t连接成一个新串 s=t 用t更新s

输入整行字符串 getline可以输入整行字符串(要包string头文件) 输入字符串时 可以使用其他分隔符作为字符串结束的标志 将分隔符作为getline的第三个参数即可

最新回复(0)