int f1(){}
int* f2(){}
int main()
{
int *a;//1
int b;
int *c;
a=c;
a=&b;
int (*p)(); //2
p=f2; //showing error
p=&f1;
}
我預計在我的程序'2'中必須表現得類似於'1'。爲什麼函數指針的行爲不同。或者我錯過了什麼?瞭解函數指針
int f1(){}
int* f2(){}
int main()
{
int *a;//1
int b;
int *c;
a=c;
a=&b;
int (*p)(); //2
p=f2; //showing error
p=&f1;
}
我預計在我的程序'2'中必須表現得類似於'1'。爲什麼函數指針的行爲不同。或者我錯過了什麼?瞭解函數指針
p=f2;
錯誤,因爲不兼容的類型的類型。 f2
是一個函數,可以返回int*
,而p
是指向函數的指針,可以指向函數返回int
例如, f1()
爲int* f2()
,你可以定義一個指針方式如下所示:
int* (*p2)(); // pointers to function f2
p2 = f2;
此外,你不需要之前函數名使用&
只是函數名就足夠了。 這裏是一個很好的鏈接閱讀:Why do all these crazy function pointer definitions all work? What is really going on?
編輯:
一段時間&functionname
和functionname
不相同例如sizeof(functionname)
is not valid而sizeof(&functionname)
是完全有效的。
謝謝。但爲什麼p2 = f2;?爲什麼不是p2 = &f2; – Alex
@Alex,這兩種形式在功能上是可以互換的。 – StoryTeller
@Alex你可以嘗試'p = ***************************************** ** f2;' – johnchen902
int* f2(){}
接受任何操作,並返回一個指針爲int的函數。
int (*p)();
一個指向:接受什麼,並返回一個INT
你有一個類型不匹配的功能。 p
不是一個指向f2
如果你無法理解這樣的定義,像所有凡人做,使用spiral rule of thumb
謝謝鏈接 – Alex
這是返回int*
int* f2(){}
的功能所以,你需要:
(int*) (*q)();
q = f2;
p
是函數指針服用無效參數並返回整數。
f1
是一個以void參數和返回整數爲函數的函數。
f2
是一個採用void參數並返回指向整數的函數的函數。
現在按定義,你可以看到f1
可以分配給p
但f2
can't.To在p
分配f2
的p
申報應int *(*p)();
你犯了錯的任務我。È不兼容的類型
對於功能
int f1(){}
int* f2(){}
正確指派將是
int (*p)();
p = f1;
int* (*p)();
p = f2;
'f2'是返回指針到'int'的函數(和將被轉換成一個'INT *(*)()'在行'p = f2;'如果編譯的話)。 'p'是一個指向返回'int'的函數的指針。不兼容的類型。 –
這裏有一個技巧來幫助輕鬆聲明函數指針類型:'typedef int type_of_f1();'。現在只需添加一個星號,然後用'type_of_f1 * p;'來聲明一個適用於f1的函數指針。 –
好[圖書](www.cs.rit.edu/~ats/books/ooc.pdf)的 –