C指针复杂声明
本文介绍了C指针复杂声明的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
char (*(*x())[])();
char (*(*x[3])())[5];
请描述一下上面的两个指针的含义,如果能写两个实例的话,就更好了。
解决方案
对于这种复杂的声明格式,可以采用替换的形式来看明白。
比如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的数组。
这篇关于C指针复杂声明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文