数组与指针的运用

并不是每个时候数组和指针都能相互装换,有特殊情况。
1数组与指针的相互转换
int arr[5] = {1,2,3,4,5};
int *p = arr;
一个指针指向数组的首地址,那么指针和数组可以相互转换
arr[i] ==== *(arr+i) ==== *(p+i) ==== p[i]
转换公式:x[y] === *(x+y) //*是对地址的解引用
数组 指针
2、数组指针
概念:指向数组的指针
int (*p)[2]; //例子 int p[][2];就相当于int (*p)[2]
int arr[3][2]; p = arr; //指向一个二维数组
3、指针数组
概念:数组元素是指针
int *p[2];
int *p1,*p2;
int *p[2] = {p1,p2};
4、函数指针
概念:指向函数的指针
void (*p)(int,int);
void func(int a,int b);
p = func; //函数名也是地址
p(10,20);
函数指针一般作为回调函数的参数。
5、指针函数
概念:返回值为指针的函数
void *p(int,int);
6、函数指针数组
概念:由函数指针构成的数组
如:void (p[2])(int,int)
p是一个数组,数组元素是指针,指向一个函数,这个函数的参数为两个int,返回值为void
7、复杂声明
分析复杂声明分为两步:
(1)从左到右找到第一个非关键字的标识符
(2)以这个标识符为中心与符号([]、()、
)逐个接合
优先级:
第一:声明中被括号括起来的部分
第二:后缀操作符:[] ()
[]:是一个数组,分析它的数组元素
():是一个函数,分析它的返回值和参数
第三:前缀操作符:

:是一个指针,分析它指向的内容

*例子1: char (func)(int)
分析:
①从左到右找到第一个非关键字的标识符func
②跟
结合,func是一个指针,执向xxx
③跟()结合,指向一个函数,这个函数的返回值是char *,参数是int
总结:func是一个函数指针
*例子2:char (func[10])(int)
分析:
①从左到右找到第一个非关键字的标识符func
②跟[]结合,func是一个数组,数组元素是xxx
③跟
结合,数组元素是一个指针,指向xxx
④跟()结合,指向一个函数,这个函数的返回值是char *,参数是int
总结:func是函数指针数组
*例子3:int (func(int))[3]
分析:
①从左到右找到第一个非关键字的标识符func
②跟()结合,func是一个函数,函数的参数是int,返回值是xxx
③跟
结合,返回值是一个指针,指向xxx
④跟[]结合,指向一个数组,数组元素int *
总结:func是数组指针函数
*例子4:char ((func(char (p)(char )))[2])(int)
分析:
①从左到右找到第一个非关键字的标识符func
②跟()结合,func是一个函数,参数是一个函数指针,返回值是xxx
③跟
结合,返回值是一个指针,指向xxx
④跟[]结合,指向一个数组,数组元素是xxx
⑤跟
结合,数组元素是一个指针,指向xxx
⑥跟()结合,指向一个函数,这个函数的参数是int,返回值是char

总结:func是函数指针数组指针函数
a) 一个整型数 int a;

b) 一个指向整型数的指针 int *a;

c) 一个指向指针的的指针,它指向的指针是指向一个整型数 int **a;

d) 一个有10个整型数的数组 int a[10];

e) 一个有10个指针的数组,该指针是指向一个整型数的 int *a[10];

f) 一个指向有10个整型数数组的指针 int (*a)[10];

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
int (*a)(int)

h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
int (*a[10])(int);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

提拉米苏yes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值