C/C++实践笔记 023函数指针强化

1.二维数组

2.函数指针
函数指针在代码区
看代码区看反汇编,看数据区看内存
对于代码区来说,函数指针有类型
runmsg,&runmsg,*runmsg三者完全等价
函数属于代码区,代码区不可写
用函数地址非法调用
函数指针变量,自己在数据区,存储了代码区的地址

3.数组名作为函数参数
数组名作为函数参数是指针
数组没有副本机制,作为参数退化为指针,大小是4,数组名可以变a=a+1
static作用域锁定在当前文件

4.函数指针强化
函数指针没有自增自减
int(*p)(int,int)函数指针
int(*)(int,int)函数指针类型
int(*get())(int,int)//一个函数,参数为空,返回值是一个函数指针

5.函数指针数组与二级函数指针
int (*p [6])(int a,int b)={getmax,getmin,add,sub,mul,divv};
typedef简化书写

6.qt创建窗口堆栈
放在堆上不会自动释放

7.函数指针数组与多线程
主线程,控制全局
线程可以同步,也可以异步
true等待所有线程,false等待一个

8.栈分配内存
alloca栈内存
可以在链接器—系统里面调栈的大小
栈上不能用free()

9.main参数
args[] 指针数组,保存常量字符串地址,第一个是路径,第二个是附加参数

10.函数返回值副本机制
返回值副本机制,CPU cache 高端CPU,就在CPUcache,低端CPU,开辟一段内存当做cache

11.左值右值与内存实体
左值都在内存,有内存实体
右值一般在寄存器,左值也可以当作右值

12.指针与const

int const *p; 
const int *p;地址是变量,指向的数据是常量

int *const p;指向的数据可以改变,地址不可以改变

int const *const p;
const int *const p; 指向的数据是常量,存储的地址也是常量

13.大数据内存模型
文件载入内存
查询
char **g_pp;//全局的二级指针
int imax=0;//标示有多少行
处理垃圾数据
32位最大内存为2G,改为64位

14.扩展深入指针 迷途指针

p释放了以后,仍然指向这片内存,就是迷途指针。
所以free(p);之后,应该让p=NULL;//不指向这片内存

15.优先级的接触生效

*p++;//等价于*p(++),p++先执行,改变的是p,而不是*p,++的优先级大于*
++*p;//等价于++(*p),++的优先级高,但是++没有和p接触,优先级只有与变量连在一起才生效才有优先级,所以此处先执行*号

 

16.32位与64位的区别与debug和release的区别
32位,地址为32位,最大内存2^32=4G
64位,地址为64位,最大内存2^64=2^32*2^32
64位系统可以运行64和32位程序,32位只能运行32位,ARM智能手机平板只能远程调试
debug(调试,多了一些调试信息)和release(经过代码优化的版本,文件较小,同时速度快于debug,可用于发布)的区别:
Debug附加了很多调试信息,主要用于调试,所以文件大

17.拓展指针左值指针与整数指针空指针以及指向为空的指针
能放在赋值号左边被赋值的值是左值
void类型的指针,由于指向不明确,大小不确定,所以无法取出里面的内容。可以对它进行强制转换
void用于参数和返回值,不明确指针类型的情况传递地址需要用到空类型的指针

posted @   千年风雅丶  阅读(224)  评论(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训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示