当我使用初始化作为int array [10] = {0}时,存储在哪里的数组;

时间:2016-10-05 18:43:33

标签: c arrays

默认情况下,本地数组存储在堆栈中。未初始化的本地数组将被分配垃圾值。 但是为什么这个语法<?php // set the expiration date to one hour ago setcookie("TestCookie", "", time() - 3600); setcookie("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1); ?>默认将所有数组元素初始化为零?即使我给int array[10] = {0};

在这种情况下是不是存储在堆栈中?它如何将它们全部初始化为零?

1 个答案:

答案 0 :(得分:2)

是否初始化本地数组与它是否存储在堆栈上无关。

如果实现使用堆栈,那么数组将在堆栈上,是否已初始化。

来自C standard的第6.7.9节:

  

10 如果未显式初始化具有自动存储持续时间的对象,则其值不确定。如果   具有静态或线程存储持续时间的对象不是   显式初始化,然后:

     

- 如果它有指针类型,则为   初始化为空指针;

     

- 如果它有算术类型,则为   初始化为(正数或无符号)零;

     

- 如果是聚合,   根据这些规则初始化(递归)每个成员,   并且任何填充都被初始化为零比特;

     

- 如果是工会,那么   第一个命名成员根据这些被初始化(递归)   规则,任何填充都初始化为零位;

     

...

     

21 如果括号括起的列表中的初始值设定项少于此值   是聚合的元素或成员,或者是一个或多个字符   string literal用于初始化已知大小的数组   是数组中的元素,聚合的其余部分   应该与具有静态的对象隐式初始化   存储时间

因此,如果初始化列表的元素少于数组,则剩余的元素初始化与非局部变量相同,即设置为0.