为什么这个赋值不能在函数之外工作?

Kor*_*era 1 c struct initialization variable-assignment

这是我发生的事情的一个例子.第一段代码不起作用.

typedef struct {
    char *desc;
    unsigned quantity;
} item;

item *inventory[INVENTORY_SIZE];

item thing = { "This is a thing.", 2 };
inventory[0] = &thing;  // Fail.

int main(void){
    // Code goes here.
}
Run Code Online (Sandbox Code Playgroud)

但是,以下代码将起作用.

typedef struct {
    char *desc;
    unsigned quantity;
} item;

item *inventory[INVENTORY_SIZE];

item thing = { "This is a thing.", 2 };

int main(void){
    inventory[0] = &thing;  // Works.
}
Run Code Online (Sandbox Code Playgroud)

我知道我不能在函数之外调用函数,但我可以在函数之外分配全局变量.这看起来像是一项任务.那么为什么它不起作用呢?

编辑:当我点击"发布"时,我想我意识到了答案.您可以在函数外部的声明中指定值,但前提是它只是声明.这就是答案,不是吗?

Aka*_*tra 7

当我们写:

data_type variableName = someValue;
Run Code Online (Sandbox Code Playgroud)

这意味着我们首先宣布VARIABLENAME为可变,并且所述类型的DATA_TYPE.随后,正在进行值的赋值,之后立即进行,因为这是分配给variableName的第一个值 ,所以它也将其初始化为someValue.

这是允许的.这是一种特殊类型的功能,即系统功能,称为初始化.

但写作

variableName = someValue;
Run Code Online (Sandbox Code Playgroud)

意味着我们尝试分配 someValue中VARIABLENAME任何函数的范围之外,并且在初始化的范围之外.

这在功能之外是不可能的.

代码仅在被调用函数内执行,初始化除外,这在初始赋值期间发生.