[英]How to pass a member of a struct to a function by reference in C?
我試圖通過引用將結構的成員傳遞給c中的函數,然后使用它來訪問相同類型的結構的相同成員。
typedef struct Node
{
int a;
int b;
int c;
} Node;
Node mynode; //global
void pass_member(int *member){
mynode.&member = 1;//gives a compiler error
}
void main()
{
mynode.a = 0;
mynode.b = 45;
mynode.c = 64;
pass_member(&mynode.a)
}
我可以看到mynode.&member
在c中是不允許的,但是我認為它表明了我正在嘗試做的事情
是否可以將結構的成員地址傳遞給c中的函數
然后使用它來訪問相同類型的結構中的成員?
基本上我想要實現的是這樣的功能
void set_member(int value_to_set, int * pointer_to_member_of_which_to_set);
這將根據函數的給定成員設置全局結構的特定成員。
我先給你一個例子:
您可以這樣執行func(&mynode)
。
而func
是void func(Node* aa)
現在您可以像這樣使用它
aa->a = aa->a + 1
等
大多數情況下,您將發送整個結構的地址,而不是單個元素的地址。
Node aa
=> aa是struct node類型(類型定義為Node)
地址: &aa
aa.a
是結構aa
的元素,其地址為&aa.a
void pass_member(int *member){ *member = 1; }
pass_member(&mynode.a) // in main()
您也可以像這樣使用它:
typedef struct Node
{
int a;
int b;
int c;
} Node;
Node mynode; //global
void pass_member(Node *member){
(*member).a = 1;//member->a = 1
}
void main()
{
mynode.a = 0;
mynode.b = 45;
mynode.c = 64;
pass_member(&mynode)
}
您問是否可以將結構成員的地址傳遞給c中的函數?
回答:是的,有可能,答案中會顯示。
然后使用它來訪問相同類型的結構中的成員?
您可以訪問該memebr,無論是某些結構還是其他結構。 只要它是指向適當類型的指針,就可以。
您有兩個選擇,可以將指針傳遞給成員變量:
void pass_member(int *member){
*member = 1;
和
pass_member(&mynode.a);
或傳遞指向整個結構的指針
void pass_member(Node *member){
(*member).a = 1; //or member->a = 1; as pointed out in comments
和
pass_member(&mynode)
您可以使用offsetof
獲得成員的相對地址。 我不知道反向操作(在C語言中不做很多事情),但是可以這樣模擬:
#define offsetin(s,a,t) *((t*)(((char*)&s)+a))
然后您的代碼將如下所示:
void pass_member(size_t member){
offsetin(mynode, member, int) = 1;
}
void main()
{
mynode.a = 0;
mynode.b = 45;
mynode.c = 64;
pass_member(offsetof(Node,a));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.