默认情况下,本地数组存储在堆栈中。未初始化的本地数组将被分配垃圾值。
但是为什么这个语法<?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};
在这种情况下是不是存储在堆栈中?它如何将它们全部初始化为零?
答案 0 :(得分:2)
是否初始化本地数组与它是否存储在堆栈上无关。
如果实现使用堆栈,那么数组将在堆栈上,是否已初始化。
来自C standard的第6.7.9节:
10 如果未显式初始化具有自动存储持续时间的对象,则其值不确定。如果 具有静态或线程存储持续时间的对象不是 显式初始化,然后:
- 如果它有指针类型,则为 初始化为空指针;
- 如果它有算术类型,则为 初始化为(正数或无符号)零;
- 如果是聚合, 根据这些规则初始化(递归)每个成员, 并且任何填充都被初始化为零比特;
- 如果是工会,那么 第一个命名成员根据这些被初始化(递归) 规则,任何填充都初始化为零位;
...
21 如果括号括起的列表中的初始值设定项少于此值 是聚合的元素或成员,或者是一个或多个字符 string literal用于初始化已知大小的数组 是数组中的元素,聚合的其余部分 应该与具有静态的对象隐式初始化 存储时间。
因此,如果初始化列表的元素少于数组,则剩余的元素初始化与非局部变量相同,即设置为0.