为结构变量赋值

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 是什么?函数范围之外的事情不能在运行时发生。

【讨论】:

以上是关于为结构变量赋值的主要内容,如果未能解决你的问题,请参考以下文章

为结构变量动态赋值

C语言关于结构体变量为动态数组赋值问题

变量的结构赋值

无法通过指针 [C] 为结构的变量赋值

变量的结构赋值

在C语言中.结构体变量之间可以相互赋值吗