C中结构体变量为全局变量或静态变量时才能初始化么?

来源:百度知道 编辑:UC知道 时间:2024/05/16 05:59:51
看机械工业出版社出版的c语言程序设计(2004年1月第1版)P181中说结构体变量为全局变量或静态变量时才能初始化,但下面又有程序
#includ<stdio.h>
main()
{struct student
{long num
.......
}stu1={102001,......}
stu2={102002,......}
.......
}
那不是初始化了一个动态的结构体变量么?

在ANSI制订C标准之前,确实如该书所说,结构体变量(或数组)为全局变量或静态变量时才能初始化,局部动态的结构体变量(或数组)不允许初始化。

但1989年ANSI制订的第一个C标准(通常称为C89)即规定:允许局部动态的结构体变量(或数组)被初始化。

你那本书虽然在2004年才出版,却不符合C89的规定,很是遗憾!

不允许对局部动态的集合类型的对象(如结构体变量,数组)进行初始化,是担心效率太低,比较耗时,因为动态局部变量的初始化在每次进入函数时都要进行。

ANSI制订C89标准时,考虑到在使用过程中确有对动态局部结构体(或数组)进行初始化的实际需要,便规定允许这种行为。

实践是检验真理的唯一标准

别把书当成圣经,自己运行一下程序检验一下就知道对错