2015-07-02 3 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

Это не имеет никакого отношения к структурам. Вы не можете делать 'int i; i = 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(); 

Без функции запускать это, как мы можем быть уверены, что это такое? Вещи, выходящие за пределы функции, не могут возникать во время выполнения.

Смежные вопросы