C语言 类型声明

1、[]与()的优先级相同,自左向右结合
2、[]与()的优先级大于*
3、[]里面的数字,不能省!即便有多维,也不能省略里面的数字,并且必须和“源”完全一致

typedef int T[8] 一个数组,长度为8的数组,类型为int
typedef int T() 一个函数,返回值为int
typedef int *T[8] 一个数组,长度为8,保存内容为int型指针
typedef int (*T)[8] 一个指针,指向一个数组,数组长度为8,数组内容为int类型
typedef int (*T)() 一个指针,指向一个函数,函数返回值为int类型
typedef int (*T[8])() 一个指针,指向一个数组,数组长度为8,数组类型为指针,指向一个函数,函数返回值为int

实际,最主要的是两个:typedef int (*t)[8]; 和typedef int (*t)(),这俩分别表示指向一个数组和指向一个函数
“指向一个数组的指针”,即数组指针,它的“元素”是一个数组,则,当指向数组的指针+1时,跳转的不是数组里一个元素的大小,而是指向的整个数组的大小。
例如:

int a[5][8];
int b[8];

int (*p)[8] = a;
int **q = a;

p++,跳转的大小是sizeof(int)*8,而q++跳转大小是sizeof(int)。

来个例子:typedef int *(*(*T)[8])(int, int);

*T 一个指针
(*T)[8] 指针指向一个长度为8的数组([]的优先级高于*,因为需要将*T括起来)
*(*T)[8] 这个数组的内容是指针
int *(     *(*T[8])     )(int, int) 指针指向的是返回值为int类型的指针,参数为(int, int)
   

从括号内到括号外,依次扩展,并参照[],()和*的优先级。 先看后面代表的是什么,再看前面是啥类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值