【问题标题】:Why is it that I can't assign values to member variable of structures outside functions? [duplicate]为什么我不能为函数外部结构的成员变量赋值? [复制]
【发布时间】:2020-10-12 00:22:24
【问题描述】:

我无法在函数之外更改变量值。
下面这段代码会报错

#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;
}

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

【问题讨论】:

    标签: c initialization variable-assignment


    【解决方案1】:

    assignment statement 只能存在于函数内部,以便系统知道何时执行该语句。不允许驻留在文件范围内,只能存在于函数的块范围内。

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

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

    【讨论】:

    • 全局变量也一样?
    • @Ashen-1 是的,阅读有关初始化与分配的信息。
    【解决方案2】:

    这个

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

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

    【讨论】:

    • 是的,但需要在此处添加分配和初始化的区别以获得更多上下文。
    猜你喜欢
    • 2018-11-12
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 2023-02-09
    • 1970-01-01
    相关资源
    最近更新 更多