0

f が f_pointer_type の配列を指すようにします。それで、私はここで何を逃したのですか?「代入の左オペランドとして左辺値が必要です」というエラーが表示されます。どういう意味ですか ?

#include <stdio.h>
typedef char* (*f_pointer_type)();
char * retHello()
{
    return "hello";
}
int main()
{
    char (* ( *f())[])(); //Declare f to be a pointer to an array of pointers to function that gets nothing and return a char.
    f_pointer_type funcs[3]; //an array of pointers to function that gets nothing and returns a pointer to char
    f = &funcs; //ERROR : lvalue required as left operand of assignment
    return 0;
}
4

3 に答える 3

3

時計回り/らせんの規則について読むfと、実際には を返す関数へのポインターの配列へのポインターを返す関数であることがわかりますchar*。つまり、これは関数のプロトタイプであり、変数の宣言ではありません。

代わりにこれを試してください:

f_pointer_type (*f)[];
于 2013-08-07T11:56:28.797 に答える
1

関数ポインターの配列は のように記述されchar* (*f[])()ます。括弧が間違っています。

もちろん、例のように常に typedef を使用することをお勧めしますf_pointer_type funcs[3]

于 2013-08-07T11:58:44.390 に答える
1

とを持つ関数へfの is ポインターとして定義します。function pointer. fvoid paramsreturn char *

于 2013-08-07T11:58:54.350 に答える