指针系列易混淆概念

1.指针数组

这样类似的名字,前边的词是作修饰,后边的词表示类型
指针数组,是一个数组,存放指针的数组
int *arr1[10];
char *arr2[4];
char **arr3[5];

都是指针数组,因此[]优先级高,所以变量名先和[]结合,确定了变量的类型是数组,然后明确数组的内容,是int *,还是char *,还是char **

2.数组指针

是一个指针,它指向一个数组
int (*p)[10];
p先和星结合,确定了变量的类型是指针,然后确定指针的类型,是int [10],是一个可以指向有10个整型元素的数组的一个指针

3.函数指针

指向一个函数的指针,可以通过函数指针调用函数,它指向的其实是函数的入口地址
√void (*pfun1)();
注意啦,只有*先和函数名结合,才是函数指针
下面这个就不是
× void *pfun();
这个是一个返回void*类型的函数

一个有趣的表达式:(*(void (*)())0)();
乍一看,整个人都傻眼啦。
细细分析:从0开始看,(类型)变量,明显是一个强制转换,(void (*)())0,与之相对应,先看0前边括号里的,(void (*)()好像是一个函数指针,将上边的例子的pfun1去掉,不就是这个表达式么,原来是把0强制转换成了函数指针类型,然后又使用函数指针调用了函数

4.函数指针数组

类比指针数组,函数指针数组是一个数组,数组的每个元素的类型是一个函数指针
int (*parr[10]])();
parr先和[]结合,明确了类型是一个数组,然后剩余部分明显是函数指针,因此parr是一个函数指针数组

用途:转移表

5.指向函数指针数组的指针

肯定是一个指针,指向一个数组,数组的每一个元素都是一个函数指针

int *p;//普通指针
int (*p)[10];//数组指针
int (*p)();//函数指针
int (*p[10])();//函数指针数组
int (*(*p)[10])();//指向函数指针数组的指针
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值