在C中在运行前定义结构成员
我有一个问题,为什么我们不能在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()之外定义此结构的成员。然而,我真的很想知道为什么 是因为需要在堆栈上分配结构并指向堆上的变量数据吗 编辑: 例
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:编辑。好的,太棒了。我需要更清楚地了解其中的区别。我假设赋值和初始化的规则是不同的。我会做更多的学习。再次感谢!