C 为结构赋值

C 为结构赋值,c,struct,C,Struct,总而言之 我可以在main.c中写入这个结构,如下所示 struct example{ int a; int b; }; 是否有一种方法可以直接写入此结构的全局内存位置,以便可以在程序的任何位置访问这些值?您可以使用大括号初始值设定项对其进行初始化,如中所示: struct example obj; obj.a=12; obj.b=13; 您还可以声明指向它的指针,如中所示: struct example obj = {12,13}; 然后使用该指针访问数据成员。我希望这能

总而言之

我可以在main.c中写入这个结构,如下所示

struct example{
    int a;
    int b;
};

是否有一种方法可以直接写入此结构的全局内存位置,以便可以在程序的任何位置访问这些值?

您可以使用大括号初始值设定项对其进行初始化,如中所示:

struct example obj;
obj.a=12;
obj.b=13;
您还可以声明指向它的指针,如中所示:

struct example obj = {12,13};
然后使用该指针访问数据成员。我希望这能解决您的问题。

有两种方式:

您可以获取它的地址,并将其作为参数传递给需要访问此数据的函数

struct example* myPtr = &obj;
int new_variable = myPtr->a;
或者,使用全局搜索:

在任何函数之外,编写结构示例obj

并在标题中声明:

&obj

编辑:阅读本期可能是个好主意:

有两种方法可以实现这一点:

一,

创建包含以下语句的头文件:

struct example {
  int a;
  int b;
};
extern struct example obj;
将以下定义添加到一个且仅一个源文件:

/* header.h */

extern struct example obj;
任何需要直接访问obj的源文件都应包含此头文件

/* source.c */

struct example obj;
二,

创建getter/setter函数:

/* otherFile.c */

#include "header.h"

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

<>这个方法可以将Objt定义为static .< /p>为什么你要标记它C++?还有,你到底是什么意思?“Jefffrey,我删除了C++。我试图通过addressstruct示例obj直接访问结构,将值写入结构的成员;移动到main外部。此结构的全局内存位置是什么???如果obj在主函数内部或任何函数内部定义,没有static关键字,则它没有全局内存位置;它仅在包含函数的执行过程中存在。为什么它需要是extern?@thinkcool extern用于使它对main以外的其他文件公开。c请参阅:extern的意思是将其视为允许其他源文件使用该名称的声明,但实例是使用struct example obj创建的;在单个源文件的全局范围内。
/* 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);
}