c语言 复杂指针声明,C指针复杂声明
對于這種復雜的聲明格式,可以采用替換的形式來看明白。
比如char (*(*x())[])();這個, 你可以找個 a代替括號里面的,然后逐步代替。
char (*(*x())[])();
// 用a 代替 (*x())[]
char (*a)();
// 上面的a的意思就是一個函數(shù)指針,空參,返回char
// 再看(*x())[],用b代替 *x()
(b)[];
// b是一個數(shù)組,而且數(shù)組每一項是一個指針a
*x();
// x是一個空參函數(shù),返回類型是一個b的指針
所以上面的x是一個函數(shù),參數(shù)為空,返回值是一個數(shù)組的指針,數(shù)組的每一項是一個指針,指向的是一個函數(shù)指針,這個函數(shù)的形式是空參返回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個值的數(shù)組,每個數(shù)組的類型是一個函數(shù)指針,這個函數(shù)(b)是空參,返回的是一個指針,指向一個含有5個char的數(shù)組。
總結(jié)
以上是生活随笔為你收集整理的c语言 复杂指针声明,C指针复杂声明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ibm服务器 p5 硬盘,IBM虚拟化实
- 下一篇: java 异常抛出空指针异常_java.