指针

复杂的指针

int *(*p(int))[3];

可以先跳过, 不看这个类型, 过于复杂从 p 开始,先与 () 结合, 说明 p 是一个函数, 然后进入 () 里面, 与 int 结合, 说明函数有一个整型变量参数, 然后再与外面的 * 结合, 说明函数返回的是一个指针, 然后到最外面一层, 先与[]结合, 说明返回的指针指向的是一个数组, 然后再与 * 结合, 说明数组里的元素是指针, 然后再与 int 结合, 说明指针指向的内容是整型数据。所以 p 是一个参数为一个整数据且返回一个指向由整型指针变量组成的数组的指针变量的函数。

int (* uof[3]) [4];

一个具有 3 个元素的数组, 每个元素是一个指向具有 4 个元素的int 数组的指针
 

函数指针

指向函数的指针 

代码和数据是一样的,都需要占据一定内存,那当然也会有一个基地址,所以我们可以定义一个指针来指向这个基地址,这就是所谓的函数指针。

假设有函数:

double func(int a,char c);
double (*p)(int a,char c);
p=&func;

即可以定义一个函数指针。

调用函数

double s1=func(100,'x');
double s2=(*p)(100,'x');

上面两个语句是等价的。

 

数组元素取地址

&a[1]  等于  a+1

 

指针之间的赋值

指针保存的是地址,地址都是一样的大小(unsigned int  4个字节),不同类型指针之间的赋值必须强制类型转换

 

野指针

  1. 指针没有赋初值
  2. 指针指向的空间被释放,但指针仍然指向原来的内存单元
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值