2015-07-02 38 views
-6

当我赋值这样它亘古不变的工作s.rollno分配结构变量的值

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

int main(){ 

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

} 

但如果我分配值主要以s.rollno它的工作原理

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

int main(){ 
s.rollno = 2; 


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

} 
+2

这与结构无关。你不能'诠释我;我= 2;'功能之外。除了声明事物之外,你什么也做不了。 – chris

+1

你不能在任何函数范围外有这样的代码。 –

+2

阅读答案在http://stackoverflow.com/questions/17363664/cant-use-structure-in-global-scope –

回答

3

你不能在全球范围内写作

s.rollno = 2; 

作为单独的声明。所有的语句都需要出现在某个函数内部,它们可以执行这些函数。

但是,您可以初始化在定义的时间价值,像

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

为什么这样? –

+0

我可以在主要外部声明一个变量 –

+0

@IshanBansal因为语法需要它。 –

0

您可以将功能范围这样的之外创建一个全局变量:

int a; 
int main() { 
    a = 5; 
} 

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

int a; 
a = somestruct.somefunction(); 

没有函数来运行它,我们怎么能确定是什么?在函数范围之外完成的事情不能在运行时发生。