2012-04-23 301 views
-1

我最近在C中發現函數指針,並試圖讓它工作正常,但我只是把我的頭髮拉到這裏!C - 指向返回字符串函數的指針函數的指針數組

我有一個指針,返回一個字符串的函數:

(char *) (*)() (*bar)(). 

但我要的6個指針數組此功能,但我不能得到它的工作。

我不斷收到編譯器錯誤可能與括號的東西它真的很混亂。我試過這樣的東西,但不起作用:

(((char)(*))((*))(((*)((foo))))([(6)])); 

我需要幫助做這個數組我做錯了什麼?

+0

你是什麼意思**你發現...... **? – Parag 2012-04-23 07:17:50

+0

你能澄清一下「*我想要一個6個指針的數組來運行這個*」嗎? – cnicutar 2012-04-23 07:18:54

+0

char *(* fun [6])(void)?您的原始「指向函數返回字符串的指針」已錯誤 – hroptatyr 2012-04-23 07:18:57

回答

2

這是你如何定義一個指針函數返回一個字符串:

(char *) (*myFuncPtr)() = myFunc 

陣:

(char *) (*myFuncPtr[6])(); 

myFuncPtr[0] = myFunc 

等等

+0

謝謝你的幫助,我測試過它效果不錯!像@Krishnabhadra這樣的人甚至不尊重有人可以成爲初學者,如果這個網站上的人是如此傲慢,他不想參加這裏:( – mathuvusalem 2012-04-24 00:58:47

0

它看起來並不像你最初的例子是有效的。要定義返回指向字符數組的指針的函數指針f,應該使用以下語法。

char* (*f)() = &func1 

如果你想一個函數指針數組,使用下面

char* (*arrf[6])() = { &func1, &func2, &func3, &func4, &func5, &func6 } 

語法這裏也是一個useful old course handout鏈路上的函數指針。

1

按照giorashc's answer或使用一個簡單的typedef

#include <stdio.h> 

typedef const char * (*szFunction)(); 

const char * hello(){ return "Hello";} 
const char * world(){ return "world";} 
const char * test(){ return "test";} 
const char * demo(){ return "demo";} 
const char * newline(){ return "\n";} 
const char * smiley(){ return ":)";} 

int main() 
{ 
    unsigned int i = 0; 
    szFunction myFunctions[6]; 
    myFunctions[0] = hello; 
    myFunctions[1] = world; 
    myFunctions[2] = test; 
    myFunctions[3] = demo; 
    myFunctions[4] = newline; 
    myFunctions[5] = smiley; 

    for(i = 0; i < 6; ++i) 
     printf("%s\n",myFunctions[i]()); 
    return 0; 
} 

Ideone demo