在C中在运行前定义结构成员

在C中在运行前定义结构成员,c,memory-management,struct,stack,heap,C,Memory Management,Struct,Stack,Heap,我有一个问题,为什么我们不能在C中运行之前定义结构的成员。我有以下结构设置,可以开始了: struct GSM{ char* status; char* make; char* accept; char* connect; char* exit; }; struct GSM GSM_comms = NULL; 现在我知道我不能在main()之外定义此结构的成员。然而,我真的很想知道为什么 是因为需要在堆栈上分配结构并指向堆上的变量数据吗 编辑: 例

我有一个问题,为什么我们不能在C中运行之前定义结构的成员。我有以下结构设置,可以开始了:

struct GSM{

    char* status;
    char* make;
    char* accept;
    char* connect;
    char* exit;

};

struct GSM GSM_comms = NULL;
现在我知道我不能在main()之外定义此结构的成员。然而,我真的很想知道为什么

是因为需要在堆栈上分配结构并指向堆上的变量数据吗

编辑:

例如,我不能这样做:

struct GSM{ 
    char* status;
    char* outbound;
    char* inbound;
    char* exit;
};

struct GSM GSM_comms;

GSM_comms.status = &variable;

int main(){

}

用于初始化结构的语法无效。您试图将
NULL
(指针)分配给结构的实例(而不是指向结构的指针)

要初始化
结构
,需要为用大括号括起来的结构中的每个值提供值:

struct GSM GSM_comms = { NULL, NULL, NULL, NULL, NULL };
编辑:

您可以在函数之外执行此操作的原因:

GSM_comms.status = &variable;
因为这是一个赋值,而不是初始化。函数外部只能显示定义(带有可选初始值设定项)。您需要执行以下操作:

struct GSM GSM_comms = { &variable, NULL, NULL, NULL, NULL };

现在我意识到我无法在
main()
之外定义此结构的成员,这一点都不正确,并且缺乏上下文来了解您的真正意思。
我无法在main()之外定义此结构的成员。
…等等…什么?你刚才做了什么?我想你要找的词是初始化。只要您说
struct x{…},就可以定义成员这个问题不清楚。请澄清您的意思?@JonathonReinhart您可以初始化。您不能使用赋值。是的,空赋值只是为了避免指针悬空的习惯。啊好。。我实际上并没有试图在这里赋值,但是这个符号非常有用。谢谢大家!@我很高兴能帮上忙。如果您觉得有用,请随时查看。re:编辑。好的,太棒了。我需要更清楚地了解其中的区别。我假设赋值和初始化的规则是不同的。我会做更多的学习。再次感谢!