c数组和指针

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 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);

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值