c语言 复杂指针声明,C指针复杂声明

对于这种复杂的声明格式,可以采用替换的形式来看明白。

比如char (*(*x())[])();这个, 你可以找个 a代替括号里面的,然后逐步代替。

char (*(*x())[])();

// 用a 代替 (*x())[]

char (*a)();

// 上面的a的意思就是一个函数指针,空参,返回char

// 再看(*x())[],用b代替 *x()

(b)[];

// b是一个数组,而且数组每一项是一个指针a

*x();

// x是一个空参函数,返回类型是一个b的指针

所以上面的x是一个函数,参数为空,返回值是一个数组的指针,数组的每一项是一个指针,指向的是一个函数指针,这个函数的形式是空参返回char。

所以使用的方式就是

char f1(){return 1;};

char f2(){return 2;};

char (*(*x())[2])(){

typedef char A();

A* f = f1;

typedef A* B[];

B arr = {f,f};

typedef B* F();

return &arr;

};

同样的道理

char (*(*x[3])())[5];这个表达式的使用方式就是

typedef char A[5];

A* b(){

static A a = {1,2,3,4,5};

return &a;

}

typedef A* B();

char (*(*x[3])())[5] = {&b,&b,&b};

也就是说x 是个有3个值的数组,每个数组的类型是一个函数指针,这个函数(b)是空参,返回的是一个指针,指向一个含有5个char的数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值