为什么我不能给函数外结构的成员变量赋值?
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*/
是一项赋值,需要包含在函数中。
这意味着,不允许在函数外部更改变量或结构。
只允许在全局范围内初始化结构。
我无法在函数外更改变量值。
下面这段代码抛出一个错误
#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*/
是一项赋值,需要包含在函数中。
这意味着,不允许在函数外部更改变量或结构。
只允许在全局范围内初始化结构。