前一阵子看到论坛中C语言版本有这么个题目:
char (*(*x())[])()
char (*(*x[3])())[5]
解析上面两个变量(或函数)的类型。
以下是我的回复:
#include
<
stdio.h
>
// 关于x的解析:
char test1( void )
... {
return 'O';
}
char test2( void )
... {
return 'K';
}
char ( * array1[])( void ) = ... { &test1, &test2 } ;
char ( * ( * a)[ 2 ])( void ) = & array1;
char ( * ( * x( void ))[ 2 ])( void )
... {
return a;
}
// 关于y的解析:
char array2[ 5 ] = " test " ;
char ( * array3)[ 5 ] = & array2;
char ( * testY( void ))[ 5 ]
... {
return array3;
}
char ( * ( * y[ 3 ])( void ))[ 5 ] = ... { &testY, &testY, &testY } ;
void main( void )
... {
}
// 关于x的解析:
char test1( void )
... {
return 'O';
}
char test2( void )
... {
return 'K';
}
char ( * array1[])( void ) = ... { &test1, &test2 } ;
char ( * ( * a)[ 2 ])( void ) = & array1;
char ( * ( * x( void ))[ 2 ])( void )
... {
return a;
}
// 关于y的解析:
char array2[ 5 ] = " test " ;
char ( * array3)[ 5 ] = & array2;
char ( * testY( void ))[ 5 ]
... {
return array3;
}
char ( * ( * y[ 3 ])( void ))[ 5 ] = ... { &testY, &testY, &testY } ;
void main( void )
... {
}