我会复活此主题以添加重要观点,因为OP对术语的困惑是可以理解的。正如@OliCharlesworth所指出的(并且他完全正确),就C语言标准而言,初始化和赋值是两个完全不同的东西。例如(假设本地范围内):
int n = 1; // definition, declaration and **initialization**
int k; // just definition + declaration, but no initialization
n = 12; // assignment of a previously initialized variable
k = 42; // assignment of a previously UNinitialized variable
的问题是,教编程的很多书都没有那么挑剔术语,所以他们称之为“初始化”任何给一个变量的第一个有意义的价值“手术” 。因此,在上面的示例中,n = 12
不会是初始化,而k = 42
会。当然,这个术语是模糊的,不精确的,可能会引起误解(尽管它经常被使用,特别是老师在向新手介绍程序时)。作为这种不确定性的一个简单的例子,让我们改写前面的例子中考虑全球范围内考虑:
// global scope
int n = 1; // definition, declaration and **initialization**
int k; // definition, declaration and **implicit initialization to 0**
int main(void)
{
n = 12; // assignment of a previously initialized variable
k = 42; // assignment of a previously initialized variable
// ... other code ...
}
你会说什么在main
的任务?第一个显然只是一个任务,但是根据模糊的通用术语,它是第二次初始化吗?默认值0
是否给k
第一个“有意义”的值?
此外,一个变量是通常说如果没有初始化或分配已被应用到它未初始化。鉴于:
int x;
x = 42;
一会常用说x
被转让之前未初始化,而不是之后。术语赋值和初始化程序在语法上被定义,但是像“初始化”和“未初始化”的术语经常被用来指代语义(在某种非正式用法中)。 [感谢基思汤普森最后一段]。
我不喜欢这个模糊的术语,但应该意识到它被使用了,唉,不是很少见。
垃圾变量? – 2012-03-18 11:47:02
int b;只包含垃圾,就是我的意思。 – sabgenton 2012-03-18 12:17:28