2010-01-20 37 views
1

我有一个功能,void funct (struct *B)。它将被struct A的某些实例调用。它只需要一个指向strut B的指针并修改那个struct B实例。如果结构A有char *name。我的问题是,我可以访问A_instance->name吗?在funct?如果是,如何? 谢谢如何获取有关C函数的调用者的信息?

+7

结构体不能调用任何东西。请张贴一些代码,说明你在问什么。 – 2010-01-20 21:40:53

+0

你的意思是“被某些实例调用?” – 2010-01-20 21:41:16

+0

funct将在其他函数中调用 – derrdji 2010-01-20 21:44:14

回答

3

你说这是C,省略了成员函数(C没有成员函数,类等)。这意味着funct只是一个函数(不是某个东西的成员),因此,只有传入的信息和全局变量。由于这些东西都不包含你想要的东西,所以你不能得到它。

但是,你也会说函数被'结构A的一些实例'调用。这没有任何意义,因为在C结构中没有成员函数,因此无法进行调用。或者你的意思是对某些struct A实例的操作正在调用函数(在这种情况下,我的第一个答案适用),或者你真的在使用C++,并且在结构A中有成员函数。

如果函数是struct A的成员函数,则funct可以完全访问调用它的A实例的所有成员,因此可以直接检查'name'。否则,我们回到我的第一个答案。

为了解决这个问题,你要么需要函数来作为struct A的成员函数(从而转到C++),要么你需要将相关信息传递给函数。

0

这听起来像你试图写一个需要处理name值出现在2个不同结构的函数:struct Astruct A。如果是这种情况,那么为什么不直接拿char*的功能,并呼叫者通过适当的name领域?

funct(char * name) { 
    .. 
} 

funct(aInstance->name); 
funct(bInstance->name); 
+2

为什么你和其他人发现有必要插入假设,等待一下就可以鼓励提问者更准确地提出他的问题,以造福所有人? – 2010-01-20 21:44:32

+0

功能的界面是固定的。它只需要struct B * – derrdji 2010-01-20 21:45:20

+0

@Neil,habbit。我发现给出一个错误的答案更有可能提出澄清问题,而不是评论原始问题。以这个例子,OP在我的回答后约3分钟发表了一个澄清。 – JaredPar 2010-01-20 21:46:29

0

恐怕C不允许你访问调用函数的数据。最简单的将只是在一个指向“struct”合格,至少,那么你将永远有机会获得A.

void func(struct B* b_ptr, struct A* a_ptr) 
{ 
    /* ... */ 
    /* do whatever you like with a_ptr->name */ 

} 
0

假设你有一个这样的程序:

struct B { 
    int dummy; 
} 

struct A { 
    char *name; 
    struct B* b; 
} 

void funcA (struct A* a) { 
    funcB (a->b); 
} 

void funcB (struct B* b) { 
    /* do something */ 
} 

而你想找到afuncB的东西,没有正确的方法来做到这一点。 可能试图做的是,通过使用指针算术或负数组索引,猜测堆栈上的a的位置,甚至可能与给定平台上的给定编译器一起工作。如果您以这种方式工作,请不要忘记将解决方案发布到The Daily WTF

相关问题