C中结构体变量为全局变量或静态变量时才能初始化么?
看机械工业出版社出版的c语言程序设计(2004年1月第1版)P181中说结构体变量为全局变量或静态变量时才能初始化,但下面又有程序#includ<stdio.h>main...
看机械工业出版社出版的c语言程序设计(2004年1月第1版)P181中说结构体变量为全局变量或静态变量时才能初始化,但下面又有程序
#includ<stdio.h>
main()
{struct student
{long num
.......
}stu1={102001,......}
stu2={102002,......}
.......
}
那不是初始化了一个动态的结构体变量么? 展开
#includ<stdio.h>
main()
{struct student
{long num
.......
}stu1={102001,......}
stu2={102002,......}
.......
}
那不是初始化了一个动态的结构体变量么? 展开
2个回答
展开全部
在ANSI制订C标准之前,确实如该书所说,结构体变量(或数组)为全局变量或静态变量时才能初始化,局部动态的结构体变量(或数组)不允许初始化。
但1989年ANSI制订的第一个C标准(通常称为C89)即规定:允许局部动态的结构体变量(或数组)被初始化。
你那本书虽然在2004年才出版,却不符合C89的规定,很是遗憾!
不允许对局部动态的集合类型的对象(如结构体变量,数组)进行初始化,是担心效率太低,比较耗时,因为动态局部变量的初始化在每次进入函数时都要进行。
ANSI制订C89标准时,考虑到在使用过程中确有对动态局部结构体(或数组)进行初始化的实际需要,便规定允许这种行为。
但1989年ANSI制订的第一个C标准(通常称为C89)即规定:允许局部动态的结构体变量(或数组)被初始化。
你那本书虽然在2004年才出版,却不符合C89的规定,很是遗憾!
不允许对局部动态的集合类型的对象(如结构体变量,数组)进行初始化,是担心效率太低,比较耗时,因为动态局部变量的初始化在每次进入函数时都要进行。
ANSI制订C89标准时,考虑到在使用过程中确有对动态局部结构体(或数组)进行初始化的实际需要,便规定允许这种行为。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询