只有静态(static)数组才能初始化??

WillHunt 2002-06-23 11:49:56
偶然发现谭浩强的《c程序设计》一书中,讲到数组初始化问题时,有这么一段:

----
...C语言规定只有静态存储(static)数组和外部(extern)存储数组才能初始化...
----

而自己平时编程的过程中,经常(几乎是全部)采用如下形式:
int a[4]={1,2,3,4}

而不是树上所说的
static a[4]={1,2,3,4};

一时也想不出依据,来请教各位。 到底有没有这种说法:

只有静态存储(static)数组和外部(extern)存储数组才能初始化
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...全文
809 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
WillHunt 2002-06-24
  • 打赏
  • 举报
回复
谢谢各位的热心参与
Landlord 2002-06-23
  • 打赏
  • 举报
回复
我觉得是只有静态的和外部的变量只能在声明的时候初始化吧!?
wenan81 2002-06-23
  • 打赏
  • 举报
回复
你看的可能是老版,我看过第二版好象没说只有静态(static)数组才能初始化。
chinafriend_xj 2002-06-23
  • 打赏
  • 举报
回复
那本书上讲的都是老标准,同新标准有许多不同,新的编译器可以支持许多他说不行的东西。
heijunma 2002-06-23
  • 打赏
  • 举报
回复
新标准规定非静态数组也可以初始化。
jishiping 2002-06-23
  • 打赏
  • 举报
回复
不要拘泥于书上的原话,对于决不变量 int a[4]={1,2,3,4}; 这样的写法是
可以的。有时书上也不一定都讲得对,有时是作者本身的说法不是很清楚,让
人有多种理解法。学习的目的,最终是掌握编程语言的内涵,而不是掌握作者
的意思。
lj_csdn 2002-06-23
  • 打赏
  • 举报
回复
跟编译程序相关,有些编译器不支持 auto变量数组的初始化
codingcoding 2002-06-23
  • 打赏
  • 举报
回复
书上说的这个初始化是编译器在你没有赋值之前,自己把这些变量初始化为0。而你说的int a[5] = {1,2,3,4,5};是自己初始化。如果你写
static int a[5] 。那么编译器会自己初始化这个数组为0。
sylmoon 2002-06-23
  • 打赏
  • 举报
回复
UP
Keanu_Rocky 2002-06-23
  • 打赏
  • 举报
回复
To WillHunt(Willy):
我觉得你对初始化的理解有误,我是这样理解的,“只有静态存储(static)数组和外部(extern)存储数组才能初始化”,这里所指的初始化是相对于编译程序而言的,即程序装入内存时这些静态数组就被操作系统初始化了,对于auto变量,编译程序必须产生相应的赋值语句来实现初始化。
static int a[5] = {1,2,3,4,5};

int a[5] = {1,2,3,4,5};
所产生的最终机器代码是不同。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧