高级指针

高级指针
  高级指针:包括双指针(二级指针)、void指针、函数指针。
1. 双指针

  双指针(二级指针),是指针的指针。
  这里写图片描述
2. void指针  

  void指针:万能指针,代表任意类型的指针。
  malloc分配堆内存时,由于无法确定内存存储类型,所以可以使用void*代表任意指针类型。
  这里写图片描述
3. 函数指针

函数指针是指向函数的指针变量,每个函数都有一个入口地址,指针变量中保存函数的入口地址
每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样。
函数指针有两个用途:调用函数和做函数的参数。

  函数指针的声明方法为:

返回值类型 (*指针变量名) ([形参列表]);

  函数指针(指向函数的指针)的定义格式:
这里写图片描述
  

  函数也会占用一块存储空间,因为函数也会占用一块存储空间所以函数也有自己的地址
  函数的地址保存在函数名中,函数名就是函数的地址 == 数组名就是数组的地址

  数组名就是指向数组第一个元素的常量指针,函数名也是指向函数第一条指令的常量指针。

函数指针的语法格式:
  这里写图片描述
  
这里写图片描述
函数指针的优缺点:
优点:是对于通用函数中要涉用到另一个函数,但函数名称未定,是让用户编的,此时需要使用函数指针。
如,通用定积分计算,被计算函数是待定的,是由调用者确定的函数
如,通用排序函数也是,比较函数与交换函数也是让用户自己编的
缺点:是由于函数指针指向的函数未定,容易导致程序崩溃。
  这里写图片描述

判断类型
  怎么判断类型:从右往左边看,没有括号就看最右边是什么类型就是什么类型;有括号,括号里是什么类型就是什么类型。

int *a[10] 指针数组
[]的优先级比高,a代表一个数组,其数组元素存储的类型是int
a的值代表数组首元素a[0]的地址值,是一个指针,即*a=a[0],只是需要注意的是这个指针类型为const,即不能改变的。
int (*a)[10] 数组指针
a代表一个数组指针,它指向一个int [5]型的数组;因为a的类型,所以a++后,它会偏移sizeof(int)*5 个字节。
(int)有参数就是函数

int (*a)(int) 函数指针

int *a (int) 指针函数
  函数和方法的区别:函数是大家的,没有类。方法是类的,不是所有人都能用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值