簡體   English   中英

將值分配給結構

[英]Assign values to a struct

struct example{
    int a;
    int b;
};

main.c

我可以在main.c寫入此結構,如下所示

struct example obj;
obj.a=12;
obj.b=13;

有沒有一種方法可以直接寫入此結構的全局內存位置,以便可以在程序的任何位置訪問這些值?

兩種方式:

您可以使用它的地址並將其作為參數傳遞給需要訪問此數據的函數

&obj

或者,使用全局:

在任何函數之外,編寫struct example obj;

並在標頭中聲明:

struct example {
  int a;
  int b;
};
extern struct example obj;

編輯:閱讀此問題可能是一個好主意: 如何使用extern在源文件之間共享變量?

有兩種方法可以實現此目的:

1。

創建一個包含以下語句的頭文件:

/* header.h */

extern struct example obj;

將以下定義添加到一個且僅一個源文件中:

/* source.c */

struct example obj;

任何需要直接訪問obj源文件都應包含此頭文件。

/* otherFile.c */

#include "header.h"

void fun(void)
{
    obj.a = 12;
    obj.b = 13;
}

2。

創建getter / setter函數:

/* source.c */
static struct example obj;

void set(const struct example * const pExample)
{
    if(pExample)
        memcpy(&obj, pExample, sizeof(obj));
}

void get(struct example * const pExample)
{
    if(pExample)
        memcpy(pExample, &obj, sizeof(obj));
}

/* otherFile.c */

void fun(void)
{
    struct example temp = {.a = 12, .b = 13};

    set(&temp);
    get(&temp);
}

使用此方法,可以將obj定義為static

您可以使用括號初始化器對其進行初始化,如下所示:

struct example obj = {12,13};

您還可以聲明一個指向它的指針,如:

struct example* myPtr = &obj;
int new_variable = myPtr->a;

然后使用該指針訪問數據成員。 我希望這能解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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