2010-01-20 81 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

相關問題