C语言指针学习总结其一

文章详细阐述了C++中指针的类型与数组的关系,指出了数组名和首元素地址的区别。讨论了一级和二级指针的差异,以及函数指针的使用,包括函数名作为地址和通过函数指针调用函数。同时提到了函数指针数组的定义和要求,强调了类型匹配的重要性。
摘要由CSDN通过智能技术生成

指针的类型是决定存储空间的关键因素

例如:char arr[5]=[1,2,3,4,5,6]

char (*pm)[5]=&arr

因为数组的优先级·是大于*的

arr 是数组名也是首元素的地址

&arr是数组的地址,但是值也是首元素的地址

但arr表示的就是首元素的地址

区别在于地址加一后的意义不同

数组指针必须要先于*结合才会解析为指针,否则就是数组此时的*号不是解引用

一级指针是取得变量的地址

二级指针取到的事一级指针的地址

两者意义不同但是指向的地址都是变量的地址

一级指针取地址取出来还是等价于*p==&p

函数地址

函数名和&函数名两者都是函数的地址函数不存在首元素的地址

函数指针必须写上返回类型

函数指针*也得用()括起来

例如:int (*pa)(int, int)=&add

值得注意的事这里的*号始终都是标注定义指针使用

1、(*(void(*)())0)()把0强制类型转化为函数地址

这个时候解引用0则成了调用函数0地址存的函数;

2、void(*signal(int,void(*)(int))(int)

拆分int,void(*)(int)传给signal的函数参数

void(*)(int)为函数指针的声明

typedef void(*函数名)(int)这个一定要注意函数名写的位置

此时简化为 函数名(*signal(int,函数名)

函数指针可以解引用调用也可以直接调用指针

因为函数名字也是函数地址,所以直接利用指针也间接等于同直接用函数

但函数指针必须括起来

函数指针数组

int(*parr[4])(int,int)={add,ass,aee,aww}

指针数组parr的元素存的是4个函数的地址但这四个函数地址必须是相同类型的

但是c++不允许直接这样写

上图的函数指针反回类型是char*字符*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值