为结构变量赋值
Posted
技术标签:
【中文标题】为结构变量赋值【英文标题】:Assigning structure variable a value 【发布时间】:2015-07-02 17:01:35 【问题描述】:当我以这种方式为 s.rollno 赋值时,它不起作用
#include<stdio.h>
struct student
int rollno;
int marks;
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 i; i = 2;
。除了声明之外,你什么都做不了。
你不能在任何函数范围之外拥有这样的代码。
在***.com/questions/17363664/…阅读答案
【参考方案1】:
你不会写
s.rollno = 2;
在全局范围内,作为单独的语句。所有语句都需要出现在某个函数中,该函数可以执行它们。
但是,你可以在定义的时候初始化值,比如
struct student
int rollno;
int marks;
s = .rollno = 2;
【讨论】:
我可以在 main 之外全局声明一个变量 @πάνταῥεῖ 你能检查一下初始化语法吗,我记不太清了... @IshanBansal 简单来说......因为每条语句都需要执行,而函数之外的语句是无效的,因为它不能执行ever(取类比,不要拿conecpt,只是为了便于理解。) @NatashaDutta,C99 没问题。如果这样做,C++ 将(可能)是= 2;
。
@IshanBansal,我想 Dennis Ritchie 可以设计出这样的 C,但他没有。在设计语言时必须做出这样的决定。 Python(可能是每种脚本语言)选择了另一种方式。这与 Java 需要围绕所有事物的类而 C++ 不需要。【参考方案2】:
你可以像这样在函数作用域之外创建一个全局变量:
int a;
int main()
a = 5;
但是你不能像现在这样设置它。这是因为运行时和编译时间之间的差异。全局变量被创建并设置到内存中,这是在编译时确定的。但是像上面a=5
这样的代码是在运行时执行的。想象一下这种情况:
int a;
a = somestruct.somefunction();
如果没有运行它的函数,我们如何确定 a 是什么?函数范围之外的事情不能在运行时发生。
【讨论】:
以上是关于为结构变量赋值的主要内容,如果未能解决你的问题,请参考以下文章