我有一个功能,void funct (struct *B)
。它将被struct A
的某些实例调用。它只需要一个指向strut B的指针并修改那个struct B实例。如果结构A有char *name
。我的问题是,我可以访问A_instance->name
吗?在funct
?如果是,如何? 谢谢如何获取有关C函数的调用者的信息?
1
A
回答
3
你说这是C,省略了成员函数(C没有成员函数,类等)。这意味着funct只是一个函数(不是某个东西的成员),因此,只有传入的信息和全局变量。由于这些东西都不包含你想要的东西,所以你不能得到它。
但是,你也会说函数被'结构A的一些实例'调用。这没有任何意义,因为在C结构中没有成员函数,因此无法进行调用。或者你的意思是对某些struct A实例的操作正在调用函数(在这种情况下,我的第一个答案适用),或者你真的在使用C++,并且在结构A中有成员函数。
如果函数是struct A的成员函数,则funct可以完全访问调用它的A实例的所有成员,因此可以直接检查'name'。否则,我们回到我的第一个答案。
为了解决这个问题,你要么需要函数来作为struct A的成员函数(从而转到C++),要么你需要将相关信息传递给函数。
0
这听起来像你试图写一个需要处理name
值出现在2个不同结构的函数:struct A
和struct A
。如果是这种情况,那么为什么不直接拿char*
的功能,并呼叫者通过适当的name
领域?
funct(char * name) {
..
}
funct(aInstance->name);
funct(bInstance->name);
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 */
}
而你想找到a
funcB
的东西,没有正确的方法来做到这一点。 可能试图做的是,通过使用指针算术或负数组索引,猜测堆栈上的a
的位置,甚至可能与给定平台上的给定编译器一起工作。如果您以这种方式工作,请不要忘记将解决方案发布到The Daily WTF。
相关问题
- 1. 获取有关函数调用的详细信息
- 2. 如何获取有关数据库事件和参与者信息的信息
- 3. 替代erlang:get_stacktrace/0获取函数调用者的信息?
- 4. 在python中获取函数调用者的信息
- 5. 如何获取有关没有回调的元素的信息
- 6. 获取有关活动参与者的有用信息
- 7. 如何获取某个函数的信息并将其调用
- 8. 如何获取有关域的信息.NET C++
- 9. 如何获取有关C#中当前运行时的信息?
- 10. buildLoadSettings,获取有关引用的信息
- 11. 如果函数没有-sender参数,如何获取调用者?
- 12. 获取有关表值函数的信息
- 13. 如何获取有关最近获取的信息?
- 14. 如何在Oracle中获取有关索引和表所有者的信息?
- 15. 如何获取有关UniData/UniVerse数据库的架构信息?
- 16. 如何获取有关发送短信的信息?
- 17. 如何获取有关oracle中表关系的信息?
- 18. 如何获取关系表的所有关联信息?
- 19. 使用WPF/C#获取有关处理器的信息
- 20. 如何获取有关用户定义类型的信息?
- 21. Grails:如何获取有关当前登录用户的信息?
- 22. 如何使用JQuery获取有关某个标签的信息?
- 23. 如何使用perl获取有关视频的信息?
- 24. 如何使用lpd/lpr获取有关打印机的信息?
- 25. 获取有关YouTube视频的信息
- 26. WooCommerce获取有关订单的信息
- 27. 获取有关继承链的信息
- 28. 获取有关numpy dtype的信息
- 29. 获取有关splayd的信息
- 30. API来获取有关URL的信息
结构体不能调用任何东西。请张贴一些代码,说明你在问什么。 – 2010-01-20 21:40:53
你的意思是“被某些实例调用?” – 2010-01-20 21:41:16
funct将在其他函数中调用 – derrdji 2010-01-20 21:44:14