Linux C 编程教程第 17 部分:变量初始化
到目前为止,变量的初始化是我们在整个正在进行的 C 编程教程系列中一直在做的事情,但我们从未真正明确地讨论过它。好吧,现在情况有所改变,这里将详细讨论变量初始化。
那么究竟什么是初始化呢?好吧,顾名思义,当一个值第一次被分配给一个变量时,这就是所谓的变量初始化。例如:
int a = 1;
现在,这也称为显式初始化。原因是,即使您没有像 a 那样为变量赋值,并尝试打印变量值,您也会看到一些随机值。
例如,考虑以下代码:
#include <stdio.h>
int main()
{
int a;
printf("a = %d", a);
return 0;
}
当我执行这段代码时,我得到的 a 为 0。但这并不总是正确的,因为像 a 这样的自动变量在没有显式初始化的情况下被初始化为随机值。这就是它总是建议用一个值(比如 0)显式初始化它们的原因,以避免错误地使用垃圾值。
请注意,如果未初始化,它唯一的自动变量会获得垃圾值。静态变量和全局变量的初始值都是 0,即使您没有显式赋值也是如此。这是一个例子:
int x;
void func();
{
static int b;
//statements
b++;
}
int main()
{
int a;
//statements
func();
return 0;
}
在上面的代码中,它保证变量 x 和 b 将被初始化为 0,但不能保证变量 a 将包含什么值。
继续,您只能使用常量值初始化静态和全局变量。换句话说,不可能根据其他变量为静态和全局变量赋值。
这是一个例子:
#include <stdio.h>
int k;
int x = k;
void func()
{
int z = 2;
static int b = z;
b++;
}
int main()
{
int a;
printf("a = %d", a);
func();
return 0;
}
当我编译这段代码时,出现以下错误:
main.c:12:9: error: initializer element is not constant
int x = k;
^
main.c: In function ‘func’:
main.c:18:20: error: initializer element is not constant
static int b = z;
^
由于 x 是全局的而 b 是静态的,您可以看到编译器清楚地表明初始化元素不是常量。所以这再次确认了只能使用常量来初始化全局变量和静态变量的事实。
继续,数组也可以用不同的方式初始化。例如,一种初始化方式是:
int arr[] = {1,2,3,4,5};
这样,数组的大小是通过计算初始化元素的数量来计算的。因此,在此示例中,数组 arr 的大小为 5,其元素为值 1-5(按此顺序)。
接下来,假设数组的大小是预定义的,并且您使用上述方法初始化数组。这是一个例子:
int arr[5] = {1,2,3,4};
然后,在这种情况下,将从 {} 内提供的列表中选取前四个元素,最后一个元素将为 0。所以是的,您可以以这种方式提供少于数组大小的元素,并让编译器通过将它们初始化为 0 来处理其余部分。
例如,下面的程序:
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5};
int i = 0;
for(i=0;i<10;i++)
printf("%d ", arr[i]);
return 0;
}
产生以下输出:
1 2 3 4 5 0 0 0 0 0
在本教程中,我们讨论了一些有关变量初始化的内容。我鼓励您尝试此处讨论的示例和概念。如果您有任何疑问或疑问,欢迎在下面发表评论。