C/C++实践笔记 022指针与数组的再加强
1.二级指针
游戏外挂与反外挂
用指针来代表一个刻度
2.指针类型详解
赋值号,除了指针以外,都会自动转换
赋值号对于指针,只接受地址,不影响指针指向的数据
指针的类型决定了从指针的值(等同首地址)前进几个字节
printf不会类型转换
3.指针的运算以及const数组名本质
指针一般不允许直接赋值,不可预知
const int *p int const *p// *在const右边,指向的数据不可以改变,可以改变指向的地址,可以用于指定只读不可写的权限(查询报表) int * const p //*在const左边 指向的地址不可以改变,指向的数据可以改变(用户只能修改自己)
int const * const p const int * const p 两边都有const,地址,数据都不可以改变(代理查询)
数组名的本质就是常量指针
4.指针的加减法与关系运算
*(a+i)等价于a[i]
debug模式下栈的出口朝上,标准 VC,GCC
realse模式下会做很多代码优化,VC和GCC会根据变量的引用次数优化顺序
5.指针优先级以及减法规则
*p++,++先执行
优先级接触生效
不同类型指针相减时,以左边指针类型为类型,地址相减除以这个类型
6.指针与数组
int a[10]={1,2,3,4,5,6,7,8,9,0};
a作为一个指针,步长4,指向一个元素
&a一个指针,步长40,指向一个一维数组
int b[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
b等价于行指针,步长一行的大小,行指针;&b步长就是整个数组,面指针;*b是一个元素的大小,4个字节,列指针
7.指针数组与数组指针
int * p1[10];//40 指针数组
int (*p2)[10];// 4 指向有10个元素的数组的指针
指针数组可以批量管理地址,可以在不改变原来数据的情况下冒泡排序
8.二维数组
9.二维数组遍历
cgi
10.malloc free
动态分配内存
int a[10]; //静态就是编译的时候确定了大小 int *p=malloc(n*sizeof(int)); //动态运行时决定 p=NULL; //设定为空 free();//释放内存,释放内存只能释放一次,不可以反复释放
malloc分配成功返回首地址,分配失败返回null
不能传负数,-1补码
C/C++要自己管理内存
内存泄露,存储地址的指针消亡,就无法释放了
11.指针与数组
int num[10]={1,2,3,4,5,6,7,8,9,10};
num就是素组第一个元素首地址,是常量,不能给它赋值。
int *p=num ;//p是一个指针变量
num[i]等价于p[i],最大的不同就是p是变量,num是常量
12.指针数组
指针数组的数组名是二级指针类型,作为参数时会退化为二级指针
二维数组动态分配时,列必须确定的,行可以动态分配
int (*p)[5]=malloc(sizeof(int) *30);
二维数组,数组必须连续
分块数组
数组删除、插入麻烦,查找方便
链表查找麻烦,删除、插入方便
分块数组,查找效率与数组一样,删除、插入效率最高
分块的数组可以等长,也可以不等长
N级指针,可以存储N-1级指针的地址
N级指针分配一个数组,存放N-1级指针
13.3种数组形态
int a[5]={1,2,3,4,5};//静态数组,编译的时候,栈上,自动回收自动释放
int *p=malloc(sizeof(int)*100); //动态数组,堆区,除非手动释放,否则会一直占着
int *pc99=(int[]){[4]=10}; //C99的新语法,默认不操作是0,静态数组,栈上,自动释放
14.四大内存分配函数
malloc不会初始化,参数是整体的大小
calloc会初始化为0,参数:第一个是个数,第二个是单个元素的大小
realloc两种状态:重新分配内存,如果下面已经够了就直接拓展,内存不会清零,否则就free原来的内容,把它拷贝到其他地方再拓展
_recalloc参数一个是个数,一个是单个元素大小,如果下面没有人用,把下面的内存清零
这四个函数
15.中括号[]优先级大于取内容*
16.字符串复习
使用宽字符必须设定中文环境
wchar_t
if(strcmp(str1,str2)==0) { printf("相等"); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人