功能指针:访问结构内的数据?

时间:2012-05-27 08:02:47

标签: c

我在下面列出了一些示例代码,问题是function_name是否有办法从struct_name访问number的值?

typedef struct struct_name {  
int number  
void (*func)();  
} * struct_name_ptr;  

void function_name() {  
//access number from struct  
}

main() {  
  struct_name_ptr newobject;  
  newobject->func=&function_name;  
  newobject->func(); //can it print the value of the number in the structure above?  
} 

5 个答案:

答案 0 :(得分:4)

呃 - 不。

结构当然可以包含函数指针。但是你调用的函数不会对结构有任何了解。除非你将指针作为函数参数传递,否则使结构变为全局。

答案 1 :(得分:1)

由于我对编程知识有限,我认为这不可行。虽然struct包含一个函数指针,但是分配给它的函数的地址是不同的,我认为除非你把它作为参数传递,否则它无论如何都不会访问它。

答案 2 :(得分:1)

好吧,两件事,struct_name-> number应该有一个值,它需要与& function_name在同一范围内,或者需要显式传递。有两种方法可以做到:

/ *这是一个全局调用struct * /

#include<stdio.h>

typedef struct struct_name {
    int number;
    void (*func)();
    } * struct_name_ptr;

struct struct_name newobject = { 0 }; 

void function_name() {
    printf("%d",struct_name);
}

void main() {

    struct struct_name_ptr newobject;

    newobject->func=&function_name;
    newobject->func();
}

/ *其中一个修改了function_name * /

#include<stdio.h>

typedef struct struct_name {
    int number;
    void (*func)();
    } * struct_name_ptr;


void function_name(struct_name) {
    printf("%d",struct_name);
}

void main() {

    struct struct_name_ptr newobject;
    newobject.number = 0;

    newobject->func=&function_name;
    newobject->func(newobject);
}

答案 3 :(得分:1)

不,比萨饼永远不会知道发送它的披萨送货员是什么样的。

常规函数只是内存中的一个地址。可以使用像这种情况下的函数指针来调用它。在任何情况下:该函数将不知道它是如何被调用的。特别是它不会知道它是使用函数指针调用的,该函数指针是(一段内存对应于某些结构)的一部分。

当使用像C ++这样的类的语言时,成员函数将有一个隐藏参数,该参数是指向类实例的指针。这就是成员函数如何了解他们的数据。

答案 4 :(得分:1)

您可以在普通C中“模拟”一个简单的OOP,例如:

typedef struct {
int number;
void (*func)();
} class;

void function_name(class *this) {
  printf("%d",this->number);
}

#define CALL(c,f) c.f(&c)

int main() {
  class object={12345,function_name};

  CALL(object,func); // voilá
}