所以,我只是想把頭放在“回傳指向陣列的指標的指標函式”周圍……但要慢慢開始,我必須理解這一點:
void Print(const char c){
printf("\nPrint: %c\n", c);
}
int main () {
void (*FunctionPointer)(const char);
FunctionPointer = &Print;
FunctionPointer('a');
}
我這樣做 - 很容易猜到發生了什么...... FunctionPointer 只是指向 Print 函式“駐留”的位置。我現在可以更靈活地指向我想要訪問的任何函式,而不是跳轉到特定函式的特定記憶體地址(存盤在暫存器上)。
但我堅持以下...
int main () {
int (*FunctionPointer())[];
}
現在看來,FunctionPointer 指向的函式實際上可以回傳一個指向 int 型別陣列的指標。編譯器接受第二行 - 到目前為止很好 - 我也理解這個概念......但我在實作方面陷入困境。
FunctionPointer 需要 - 再次指向一個函式。該函式確實可以回傳一個指向 int 型別陣列的指標...... soooooo:
int *Array(){
int ar[2] = {5,6};
return ar;
}
int main () {
int (*FunctionPointer())[];
FunctionPointer = &Array;
}
但是,編譯器不接受最后一段代碼.... 那么,給出了什么?
uj5u.com熱心網友回復:
和
int (*FunctionPointer())[];
您已宣告FunctionPointer為一個函式,該函式回傳一個指向 int 陣列的指標——而不是函式指標。你要
int *(*FunctionPointer)();
如果你[]在這里使用,你會得到一個錯誤,因為函式不能回傳陣列——陣列不是第一型別別——并且與函式引數不同,當用作回傳值時,陣列不會被靜默轉換為指標一個函式型別。這樣,您仍然會收到警告
t.c:3:12: warning: function returns address of local variable [-Wreturn-local-addr]
return ar;
^~
這是不言自明的
uj5u.com熱心網友回復:
您已經宣告了函式指標陣列。陣列不能賦值。函式不能回傳陣列。你可能希望
int* (*FunctionPointer)();
FunctionPointer = &Array;
uj5u.com熱心網友回復:
使用 typedef 時,函式指標要容易得多。您可以簡單地使用與“普通”資料指標相同的符號。
// func is a function type. It has one parater and returns pointer to int
typedef int *func(const char);
// funcptr is a pointer to func
func *funcptr;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/486430.html
上一篇:C 錯誤:“未分配被釋放的指標”
下一篇:掃描未簽名直到EOF無法正常作業
