繁体   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