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

时间:2017-07-13 12:38:08

标签: 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()之外定义此结构的成员。但是我真的很想知道为什么。

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

编辑:

我不能这样做:

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

struct GSM GSM_comms;

GSM_comms.status = &variable;

int main(){

}

1 个答案:

答案 0 :(得分:1)

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

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

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

编辑:

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

GSM_comms.status = &variable;

是因为这是一个赋值,而不是初始化。只有定义(带有可选的初始值设定项)才能出现在函数外部。你需要这样做:

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