使用typedef char(* fptr1())();

时间:2017-05-28 09:16:01

标签: c pointers

我在这一行收到编译错误消息(请参阅下面的代码):

   z = f;        

错误消息是

  lvalue required as left operand of assignment

我正在尝试利用typedef char (*fptr1())();但我没有成功。 我做错了什么?

 #include <stdio.h>

 char f1() {
    return 'a';
 }

 char f2() {
    return 'b';
 }

 typedef char (*fptr)();
 typedef char (*fptr1())();

 //f is a function( char ) that returns a pointer to a function which returns a char.
 fptr f( char c ) {
     if ( c == 'a' ) 
        return f1;

     else 
        return f2; 
 }

int main() {
   fptr1 z;
   char c = 'a';

   fptr fp1 = f( c );
   printf( "%c\n", fp1());

   //z = f;        //error: lvalue required as left operand of assignment
   //fptr fp2 = z( c );
   //printf( "%c\n", fp2()); 
}

1 个答案:

答案 0 :(得分:2)

你的第二个定义是错误的。你想要一个函数指针,该函数指向一个带有char并返回fptr的函数,因此你将它定义为

typedef fptr (*fptr1)(char);

或者如果您不想在typedef中使用typedef

typedef char (*(*fptr1)(char))();