+ -
当前位置:首页 → 问答吧 → 返回“函数指针”和“数组指针”的函数怎么写?

返回“函数指针”和“数组指针”的函数怎么写?

时间:2010-08-24

来源:互联网

本帖最后由 zhou304082042 于 2010-08-24 09:50 编辑

这两个函数的返回值(???)部分怎么写?test是个函数。
???  myfun1()
{
   int (*p)[] = {"how", "are", "you"};
   return p;
}

???  myfun2()
{
    int (*q)(int) = test;
    return q;
}

作者: zhou304082042   发布时间: 2010-08-24

要么直接void * ?
那么你在外部怎么识别到底是哪个= =!

作者: daybreakcx   发布时间: 2010-08-24

看来楼主最好弄个结构体包装下 。

作者: davelv   发布时间: 2010-08-24

最好用结构体吧

作者: linuxlixk   发布时间: 2010-08-24

  1. (int (*)[]) fun()

  2. (int(*)()) fun()
  3. ????????
复制代码

作者: jackin0627   发布时间: 2010-08-24

本帖最后由 zhou304082042 于 2010-08-24 09:50 编辑

我不是要一起返回

作者: zhou304082042   发布时间: 2010-08-24

你可以试试看typedef

作者: daybreakcx   发布时间: 2010-08-24



QUOTE:
jackin0627 发表于 2010-08-24 09:45




    不行啊。。。

作者: zhou304082042   发布时间: 2010-08-24

没让你一起返回,结构体两个域。
一个标志域,表示值域的类型;另外一个是值域,也就是你的指针,使用void *类型即可。

作者: davelv   发布时间: 2010-08-24

  1. #include <stdio.h>

  2. typedef int (*FUNCTION)();

  3. int f1(int arg){return arg;}
  4. int f2(int arg){return arg;}
  5. int f3(int arg){return arg;}

  6. FUNCTION get_function(int i)
  7. {
  8.     FUNCTION function[] = {f1,f2,f3};
  9.     return function[i>2?0:i];
  10. }

  11. int main()
  12. {
  13.     FUNCTION f = get_function(1);
  14.     printf("%d\n", f(100));
  15.     return 0;
  16. }
复制代码
楼主是想实现这样的效果吗?

作者: zhangsuozhu   发布时间: 2010-08-24

回复 zhangsuozhu


你的函数指针类型都一样的,楼主想返回不同类型的函数指针

作者: davelv   发布时间: 2010-08-24

int (*p)[] = {"how", "are", "you"};

这是啥啊?指向数组的指针吗?

作者: zhangsuozhu   发布时间: 2010-08-24

多开个域表示是哪种指针,然后统一用void *搞定

作者: daybreakcx   发布时间: 2010-08-24

  1. #include <stdio.h>


  2. int  f1(int arg){return arg;}
  3. char f2(char arg){return arg;}
  4. long f3(long arg){return arg;}

  5. void *get_function(int i)
  6. {
  7.     void *function[] = {(void *)f1,(void *)f2,(void *)f3};
  8.     return function[i>2?0:i];
  9. }

  10. int main()
  11. {
  12.     char (*f)(char) = get_function(2);
  13.     printf("%c\n", f('a'));
  14.     return 0;
  15. }
复制代码
多类型的! 不过不建义这样用。 很不规整。还是包到个结构里比较好

作者: zhangsuozhu   发布时间: 2010-08-24

不包到结构体里头在返回时候的类型判定有问题吧,如果单纯接收到void*而不知道到底是哪个的话

作者: daybreakcx   发布时间: 2010-08-24

本帖最后由 zhou304082042 于 2010-08-24 10:33 编辑

回复 zhangsuozhu



QUOTE:
    #include <stdio.h>

typedef int (*FUNCTION)();

int f1(int arg){return arg;}
int f2(int arg){return arg;}
int f3(int arg){return arg;}

FUNCTION get_function(int i)
{
    FUNCTION function[] = {f1,f2,f3};
    return function[i>2?0:i];
}

int main()
{
    FUNCTION f = get_function(1);
    printf("%d\n", f(100));
    return 0;
}



这是我想要的,我想问的是语法问题,我是想返回指向函数的指针,我原来想这样写:
int (*)() get_function(int i)
{
   FUNCTION function[] = {f1,f2,f3};
    return function[i>2?0:i];
}

提示语法错误,你是用typedef定义了这个返回类型
typedef int (*FUNCTION)();
FUNCTION get_function(int i)
{
    FUNCTION function[] = {f1,f2,f3};
    return function[i>2?0:i];
}

这里一定要定义类型吗?能不能直接写返回这种类型?还有你调用函数指针指向的函数时用的:f(100),C语言程序设计(第2版)上怎么说要这么写:(*f)(100)?
另外这本书上的这两个声明分别表示什么:
1: char (*(*x())[])()
2: char (*(*x[3])())[5]

作者: zhou304082042   发布时间: 2010-08-24

用void *吧,Linux很多都是用void *的!

作者: liexusong   发布时间: 2010-08-24