我有一個功能,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. 替代erlang:get_stacktrace/0獲取函數調用者的信息?
- 3. 在python中獲取函數調用者的信息
- 4. 如何獲取某個函數的信息並將其調用
- 5. 如何獲取有關C#中當前運行時的信息?
- 6. 如何獲取有關域的信息.NET C++
- 7. 如果函數沒有-sender參數,如何獲取調用者?
- 8. 獲取有關表值函數的信息
- 9. 如何在Oracle中獲取有關索引和表所有者的信息?
- 10. 如何獲取有關發送短信的信息?
- 11. 如何獲取關係表的所有關聯信息?
- 12. 使用WPF/C#獲取有關處理器的信息
- 13. 獲取有關WiFi網絡的信息
- 14. API來獲取有關URL的信息
- 15. 獲取有關JVM崩潰的信息
- 16. 獲取有關splayd的信息
- 17. 獲取有關YouTube視頻的信息
- 18. WooCommerce獲取有關訂單的信息
- 19. 獲取有關jboss的信息
- 20. 獲取有關繼承鏈的信息
- 21. Grails:如何獲取有關當前登錄用戶的信息?
- 22. 如何使用JQuery獲取有關某個標籤的信息?
- 23. 如何獲取有關用戶定義類型的信息?
- 24. 如何使用perl獲取有關視頻的信息?
- 25. 如何使用inspect從Python中的被調用者獲取調用者的信息?
- 26. 如何獲取有關Oracle中某個表的所有信息?
- 27. 有關函數RegQueryInfoKey的詳細信息?
- 28. 如何使用C++獲取有關Windows可執行文件(.exe)的信息
- 29. 獲取信息的PHP函數
- 30. Eclipse調試器如何獲取有關類內私有變量的信息?
結構體不能調用任何東西。請張貼一些代碼,說明你在問什麼。 – 2010-01-20 21:40:53
你的意思是「被某些實例調用?」 – 2010-01-20 21:41:16
funct將在其他函數中調用 – derrdji 2010-01-20 21:44:14