从同一结构中的函数指针访问变量

时间:2016-01-22 22:23:14

标签: c

我有这个结构:

typedef struct        s_hashmap
{
    t_hashmap_elem    **array_elements;
    size_t            array_size;
    void              *(*get)(struct s_hashmap **, void *);
    void              (*add)(struct s_hashmap **, t_hashmap_elem *);
}                     t_hashmap;

我可以在获取函数指针时访问array_elements而不传递我的变量作为参数,如下所示:

  

h-> get(& h,& key); // h是t_hashmap变量。

如果无法做到这一点,请向我解释另一种方法。

提前谢谢。

2 个答案:

答案 0 :(得分:2)

不,你不能。 C中没有用户定义类型的方法。如果要更改它,必须将指针(或指向指针的指针,具体取决于参数声明)传递给结构的对象。

答案 1 :(得分:2)

不。 C 函数不是方法:函数没有机制来发现调用它的对象。如果您需要此功能,则应考虑使用C以外的语言。

你几乎在你的问题中钉了“做其他的方法”。但请注意,在C中,很少有结构拥有函数指针的原因,所以你也可以通过它的正确名称来调用函数:

@Service
public class ShutdownListener {

    private static final Logger LOGGER = Logger.getLogger(ShutdownListener.class);      
    @EventListener(ContextClosedEvent.class)
    public void onContextClosed(ContextClosedEvent event) {
        LOGGER.info("OAE: event :" + event);
        ApplicationContext ctx = event.getApplicationContext();
        LOGGER.info("OAE: context :" + ctx);
        try {
            LOGGER.info("sleeping");
            TimeUnit.SECONDS.sleep(60);
            LOGGER.info("slept");
        } catch (InterruptedException e) {
            LOGGER.error(e);
            e.printStackTrace();
        }   
   }

用于C语言中的函数指针,但它们对于模拟对象方法并不是很好,因为像Java这样的语言为你做的所有魔术(弄清楚应该调用哪个方法)在给定对象上,并传入对象的引用)必须在C中明确地完成。