2012-04-23 179 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