簡體   English   中英

如何在C中通過引用將結構的成員傳遞給函數?

[英]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)

funcvoid func(Node* aa)

現在您可以像這樣使用它

aa->a = aa->a + 1

大多數情況下,您將發送整個結構的地址,而不是單個元素的地址。

  • Node aa => aa是struct node類型(類型定義為Node)

  • 地址: &aa

  • aa.a是結構aa的元素,其地址為&aa.a

解決方案 - 1

 void pass_member(int *member){ *member = 1; } 
  pass_member(&mynode.a) // in main()

解決方案-2

您也可以像這樣使用它:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM