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("相等");
}

 

posted @   千年风雅丶  阅读(166)  评论(0编辑  收藏  举报
编辑推荐:
· 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训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示