C++ 为结构变量赋值

C++ 为结构变量赋值,c++,c,struct,structure,C++,C,Struct,Structure,当我以这种方式为s.rollno赋值时,它不起作用 #include<stdio.h> struct student{ int rollno; int marks; }s ; s.rollno = 2; int main(){ printf("%d",s.rollno); } #包括 结构学生{ int-rollno; 整数标记; }s; s、 rollno=2; int main(){ printf(“%d”,s.rollno); } 但如果我在main中给s.roll

当我以这种方式为s.rollno赋值时,它不起作用

#include<stdio.h>
struct student{
int rollno;
int marks;
}s  ;
s.rollno = 2;

int main(){

printf("%d",s.rollno);

}
#包括
结构学生{
int-rollno;
整数标记;
}s;
s、 rollno=2;
int main(){
printf(“%d”,s.rollno);
}
但如果我在main中给s.rollno赋值,它就会工作

#include<stdio.h>
struct student{
int rollno;
int marks;
}s  ;

int main(){
s.rollno = 2;


printf("%d",s.rollno);

}
#包括
结构学生{
int-rollno;
整数标记;
}s;
int main(){
s、 rollno=2;
printf(“%d”,s.rollno);
}
你不能写

 s.rollno = 2;
在全局范围内,作为单独的语句。所有语句都需要出现在可以执行它们的函数中

但是,您可以在定义时初始化该值,如

struct student {
    int rollno;
    int marks;
} s = {.rollno = 2};  

可以在函数范围外创建全局变量,如下所示:

int a;
int main() {
   a = 5;
}
但是你不能像你那样设置它。这是因为运行时和编译时之间存在差异。全局变量被创建并设置为内存,这是在编译时确定的。但是像上面的
a=5
这样的代码是在运行时执行的。想象一下这种情况:

int a;
a = somestruct.somefunction();

如果没有一个函数来运行它,我们如何确定a是什么?超出函数范围的操作不能在运行时发生。

这与结构无关。你不能做
inti;i=2函数外部。除了声明之外,你不能做很多事情。你不能让这样的代码超出任何函数范围。请阅读我可以在main@πάντα之外全局声明变量的答案ῥεῖ 你能检查一下初始化语法吗,我只是记不清了…@IshanBansal简单地说。。。。因为每个语句都需要执行,而函数外的语句是无效的,因为它永远无法执行(打个比方,不要用conecpt,这只是为了便于理解。)@NatashaDutta,这对C99来说没问题。C++将(<)>代码>={ 2 };<如果这样做的话。@IshanBansal,我想丹尼斯·里奇可以设计出那样的C语言,但他没有。这样的决定必须在设计语言时做出。Python(可能是每种脚本语言)选择了另一种方式。这是java如何围绕所有的类要求而C++不一样的。