首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

结构体中有函数指针,怎么让函数指针指向的函数能够获取这个结构体中的其它成员变量

2012-03-29 
结构体中有函数指针,如何让函数指针指向的函数能够获取这个结构体中的其它成员变量?如题,一下是典型的示例

结构体中有函数指针,如何让函数指针指向的函数能够获取这个结构体中的其它成员变量?
如题,一下是典型的示例代码:

C/C++ code
typedef struct {  int a, b;  int *(max)(int,int);}Func;int max(int a, int b)/* * 如何让这个函数不需要参数也能获得结构体中的a和b这两个变量? **/{   return a>b ? a:b;}int main(){  Func f;  f.max = max;  f.a   = 100;  f.b   = 50;  printf("max: %d\n", f.max(f.a, f.b));  /*   * 以上一段代码是这样的,我想让它这样也能输出同样的结果:   * printf("max: %d\n", f.max());   * 不直接传参数给函数,能实现吗?   **/  return 0;}


请问,用C语言的话,能实现上述的功能吗?

[解决办法]
定义Func的全局变量喽,这样你的自定义函数直接访问全局变量不就不需要额外传了。要么你强制一个寄存器去存你的变量值,max里再从指定寄存器里读出来?

总之都不是很灵活的做法,但函数指针么...
[解决办法]
哦对了,通过一些系统调用做起来还顺当一点,什么socket啦、管道啦、共享内存啦...
[解决办法]
你不传参数怎么得到具体地址呢
[解决办法]
像C++非static成员函数一样: 

int max(_struct * pObj)
{
 
}

相当于显式传递this指针
[解决办法]

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

struct 
{
 static const int a=100, b=50;
int (*max1)();
}
Func;

int max()
/*
 * 如何让这个函数不需要参数也能获得结构体中的a和b这两个变量?
 **/

return Func.a>Func.b ? Func.a:Func.b;
}

int main()
{
Func.max1 = max;
//Func.a = 100;
//Func.b = 50;
printf("max: %d\n", Func.max1());
/*
* 以上一段代码是这样的,我想让它这样也能输出同样的结果:
* printf("max: %d\n", f.max());
* 不直接传参数给函数,能实现吗?
**/
getchar();
return 0;
}

[解决办法]
C/C++ code
typedef struct _Func{  int a, b;  int (*max)(struct _Func*);}Func, *PFunc;int max(PFunc f)/* * 如何让这个函数不需要参数也能获得结构体中的a和b这两个变量? **/{   return f->a > f->b ? f->a : f->b;}int main(){  Func f;  f.max = max;  f.a   = 100;  f.b   = 50;  printf("max: %d\n", f.max(&f));  /*   * 以上一段代码是这样的,我想让它这样也能输出同样的结果:   * printf("max: %d\n", f.max());   * 不直接传参数给函数,能实现吗?   **/  return 0;}
[解决办法]
懂了,楼主是想用c去实现c++的类吧
[解决办法]
探讨
再加个要求:
结构体不能是全局变量,虽然可以将结构体当成参数传给函数,但是,我想知道是否有一种方法,能让函数即使不传参数,也知道该函数的函数指针所在的结构体。

[解决办法]
如果你这里要达到c++那样的效果就应该是

struct Func
{
int a, b;
int (*max)(struct Fnc*this);
};

Func obj;
obj.max(&obj);



[解决办法]
探讨

引用:

定义Func的全局变量喽,这样你的自定义函数直接访问全局变量不就不需要额外传了。要么你强制一个寄存器去存你的变量值,max里再从指定寄存器里读出来?

总之都不是很灵活的做法,但函数指针么...

貌似我之前看过类似于这样的代码:
C/C++ code
window::resize(100, 300);

它是怎么知道要修改的窗口尺寸是这个……

[解决办法]
lz真是执着...
还是建议去挖点历史材料看看,Bjarne老哥以前在设计C++的时候应该已经有过许多尝试和思考,虽然我没看过,不过我觉得应该会留下一些文章,lz不妨找找看。

也可以试试从编译原理的角度找找突破口。
------解决方案--------------------


探讨

引用:

引用:

引用:

定义Func的全局变量喽,这样你的自定义函数直接访问全局变量不就不需要额外传了。要么你强制一个寄存器去存你的变量值,max里再从指定寄存器里读出来?

总之都不是很灵活的做法,但函数指针么...

貌似我之前看过类似于这样的代码:
C/C+……

[解决办法]
探讨

引用:

引用:

引用:

引用:

定义Func的全局变量喽,这样你的自定义函数直接访问全局变量不就不需要额外传了。要么你强制一个寄存器去存你的变量值,max里再从指定寄存器里读出来?

总之都不是很灵活的做法,但函数……

[解决办法]
探讨

引用:

引用:

引用:

引用:

定义Func的全局变量喽,这样你的自定义函数直接访问全局变量不就不需要额外传了。要么你强制一个寄存器去存你的变量值,max里再从指定寄存器里读出来?

总之都不是很灵活的做法,但函数……

[解决办法]
探讨

引用:

引用:

引用:

引用:

引用:

定义Func的全局变量喽,这样你的自定义函数直接访问全局变量不就不需要额外传了。要么你强制一个寄存器去存你的变量值,max里再从指定寄存器里……

[解决办法]
探讨

引用:

引用:

引用:

引用:

引用:

引用:

定义Func的全局变量喽,这样你的自定义函数直接访问全局变量不就不需要额外传了。要么你强制一个寄……

[解决办法]
寄存器里存结构体地址,或者在调用max函数前把结构体地址手工压栈
探讨

定义Func的全局变量喽,这样你的自定义函数直接访问全局变量不就不需要额外传了。要么你强制一个寄存器去存你的变量值,max里再从指定寄存器里读出来?

总之都不是很灵活的做法,但函数指针么...

[解决办法]
我不知道你还有什么疑问
[解决办法]
我觉得还是老实点好,与其花这么多时间探讨这个问题,不如多写几行代码然后考虑关于其它的算法之类的问题!

热点排行