我有一个函数void funct (struct *B)
。它将由struct A
的某些实例调用。它只需要一个指向strut B的指针并修改该struct B实例。如果结构A具有char *name
。我的问题是,我可以访问A_instance->name
吗?在funct
?如果有,怎么样?
谢谢
答案 0 :(得分:3)
你说这是C,它省略了成员函数(C没有成员函数,类等)。这意味着funct只是一个函数(不是某个东西的成员),因此,你只有传入的信息和全局变量。由于这些东西都不包含你想要的东西,你无法得到它。
但是,你也说过funct是由'struct A'的一些实例调用的。这没有任何意义,因为在C结构中没有成员函数,因而无法进行调用。要么你的意思是在结构A的某些实例上的操作是调用funct(在这种情况下,我的第一个答案适用),或者你真的在使用C ++,并且你在结构A中有成员函数。
如果funct是struct A的成员函数,那么funct可以完全访问调用它的A实例的所有成员,因此可以直接检查'name'。否则,我们回到第一个答案。
为了解决这个问题,你需要将funct作为struct A的成员函数(从而转向C ++),或者你需要将相关信息传递给函数。
答案 1 :(得分:0)
听起来你正在尝试编写一个需要处理name
值的函数,该函数存在于2个不同的结构中:struct A
和struct A
。如果是这种情况,那么为什么不直接在功能中使用char*
并让呼叫者通过相应的name
字段?
funct(char * name) {
..
}
funct(aInstance->name);
funct(bInstance->name);
答案 2 :(得分:0)
我担心C不允许您访问调用函数数据。最简单的方法就是传入一个指向“struct A”的指针,至少那时你总是可以访问A.
void func(struct B* b_ptr, struct A* a_ptr)
{
/* ... */
/* do whatever you like with a_ptr->name */
}
答案 3 :(得分: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 */
}
并且您希望在a
中找到有关funcB
的内容,但没有正确的方法可以做到这一点。您可能试图做的是通过使用指针算法或负数组索引来猜测堆栈上a
的位置,这甚至可以用于给定平台上的给定编译器。如果您按照这种方式开展工作,请不要忘记将解决方案发布到The Daily WTF。