为什么我不能给函数外结构的成员变量赋值?

Why is it that I can't assign values to member variable of structures outside functions?

我无法在函数外更改变量值。
下面这段代码抛出一个错误

#include <stdio.h>
#include <string.h>

struct student{
   unsigned int age:3;
};


struct student student1;
student1.age=8;/*this line*/

int main( ) {

    student1.age = 4;
    printf( "student1.age : %d\n", student1.age );

    student1.age = 7;
    printf( "student1.age : %d\n", student1.age );

    student1.age=5;
    printf( "student1.age : %d\n", student1.age );

    return 0;
}

这不会引发错误

    #include <stdio.h>
#include <string.h>

struct student{
   unsigned int age:3;
};


struct student student1;
/*student1.age=8;this line*/

int main( ) {

    student1.age = 4;
    printf( "student1.age : %d\n", student1.age );

    student1.age = 7;
    printf( "student1.age : %d\n", student1.age );

    student1.age=5;
    printf( "student1.age : %d\n", student1.age );

    return 0;
}

请解释原因。此外,在函数之外,它不允许我在定义后更改全局变量的值。

一个assignment statement只能存在于函数内部,这样系统才知道什么时候执行语句。不允许驻留在文件范围内,只能存在于函数的块范围内。

详细说明,在 C(托管环境)中,程序执行从 main() 函数开始,并在到达 main() 末尾时结束,或者以编程方式终止。在典型的环境中,控件从 _start 移动到 main(),然后是子函数,返回到 main(),最后返回到 _start 以终止程序。因此,任何驻留在任何功能块之外的语句都没有机会执行,使其几乎无用。这就是为什么 运行-time 语句不允许在函数块之外。

另一方面,

Initialization 在文件范围内是允许的。计算发生在编译时,初始化发生在 main() 执行之前 - 所以这可以而且是允许的。

这个

student1.student1=6;/*This line*/

是一项赋值,需要包含在函数中。 这意味着,不允许在函数外部更改变量或结构。
只允许在全局范围内初始化结构。