回 帖 发 新 帖 刷新版面

主题:[讨论]求助:(*step)()看到那位朋友的贴子发现的问题

#include<stdio.h>
struct abc
 {int (*step)(abc a,int b);
  char *chr;
 }a_ok;
void main()
{int step_ok(abc a,int b);
abc *ok;
int (*step_lnk)(abc a,int b);
ok->step=step_ok;
a_ok.step=step_ok;
step_lnk=step_ok;
a_ok.chr="abcdef......";
ok->step(a_ok,123);   /*但a_ok.(*step)(a_ok,123);这样编译会错误,用的borlandc3.1,谭浩强的C语言程序设计中说调用函数要(*step)(a_ok,123),怎么在结构中不成立,下面在main()中这样调用就行,step(a_ok,123)也行,为什么啊?*/
a_ok.step(a_ok,123);
step_lnk(a_ok,123);
(*step_lnk)(a_ok,123);
}
int step_ok(abc a,int b)
{printf("%s\n",a.chr);
printf("b=%d\n",b);
return 0;}
用borlandc3.1编译通过,运行正常,但上面问题怎么解释?struct abc
 {int (*step)(abc a,int b);    我还以为会出错,哪来的abc,怎么成功编译了?
  char *chr;
 }a_ok;

回复列表 (共3个回复)

沙发

你的代码写得像天书,为什么不好好排版一下呢?

#include <stdio.h>

struct abc
{
    int (*step)(abc a,int b);
    char* chr;
} a_ok;

int step_ok(abc a,int b);

int main()
{
    abc a_ok;
    abc* ok = new abc;
    int (*step_lnk)(abc a,int b);

    a_ok.chr = "abc";
    a_ok.step = step_ok;
    ok->step = step_ok;
    step_lnk = step_ok;

    ok->step( a_ok, 123 );
    a_ok.step( a_ok, 123 );
    step_lnk( a_ok, 123 );

    (*ok->step)( a_ok, 123 );
    (*a_ok.step)( a_ok, 123 );
    (*step_lnk)( a_ok,123 );
}
int step_ok(abc a,int b)
{
    printf("%s\n",a.chr);
    printf("b=%d\n",b);
    return 0;
}

"a_ok.(*step)(a_ok,123);这样编译会错误"
------
*step 不是 a_ok 的成员,step才是a_ok的成员
a_ok.step 才是 int (*)(abc a,int b) 类型
所以应该是 (*a_ok.step)(a_ok,123);

板凳

自己试一下简单的用法:a_ok.step(a_ok, 123);

函数指针可以直接用于调用。

3 楼

额 ....没发现!



























------------------------------------------------------
[url=http://www.lawyercw.com/]上海律师[/url]

我来回复

您尚未登录,请登录后再回复。点此登录或注册