C语言数组如何提供随机数?



我是C语言的新手,在学习数组时发现了一个问题。

#include <stdio.h>

int main (void){

int array [10];
array [5] = 15;

printf("%dn", array[5]);
printf("%dn", array[9]);
return 0;
}

在这个主方法中,第一个printf方法在初始化数组值时返回15。

我期望其他未初始化的值,如array[9]返回0,但第二个printf方法返回随机数,如在我的WSL2 Ubuntu系统中32764。

在我正在观看的教程视频中,它返回0。有什么不同,这是如何发生的?

在C(甚至c++)中,区分初始化赋值是很重要的。初始化只发生在声明变量的那一行。例子:

int array [10] = { [5] = 15 }; // initialization

这一行理论上可以在程序加载时计算,在基于RAM的系统上,比如PC。然而,赋值只发生在运行时,当您设置变量的值时:

array[5] = 15; // assignment

这个区别很重要,因为C有很多关于初始化时会发生什么的规则。例如,如果您只初始化数组中的一个项,则保证将其余项初始化为零。如果你没有初始化任何项,并且数组是本地的("自动存储"),那么它将包含垃圾值。

因此你的例子有未指定的输出,因为printf("%dn", array[9]);打印一个不确定的值。它可以通过将赋值改为初始化来修复,如下所示:

int array [10] = { [5] = 15 };

或者,如果你喜欢,这是等效的:

int array [10] = { 0,0,0,0,0,15 };

你所做的就是去酒店前台预订了10个房间。现在他们是你的了,你想怎么做就怎么做,但这家酒店没有清洁工。它只关心房间是否被预订,所以之前的住户留下的东西还在那里。

如果你把15块存到6号房间,它就会被清理干净,并把15块放在那个房间,但剩下的还是和你拿到的一样。

这并不是数组所独有的,你所保留的所有内存都是你要照顾和管理的。

未初始化array[9]。当你在C中没有初始化任何变量时,它将包含垃圾value,它可以是任何值,并不一定总是0。这就是为什么你总是得到一些随机数。

和把0当成垃圾的人Value有他自己的运气。

我是wannabeAlengineer。C是一种非常低级的语言。这意味着程序员可以控制内存。

如果你声明了一个变量,在这个例子中是数组,这个数组已经分配了n字节的内存。通常情况下,这个字节与0不同,因为其他程序在相同的内存空间中执行了一些操作。

如果你想初始化数组和所有这些值你想为0吗:

int array[10] = {0};

该指令将数组中的所有内存空间归零。

然后,当你执行的时候你会得到

int array[5] =15;
int array[9]=0;

给你找钱:

#include <stdio.h>
int main (void){
//int array [10];
int array[10] = {0}; //init all to 0 values
array [5] = 15;
printf("%dn", array[5]);
printf("%dn", array[9]);
return 0;
}

我希望我帮到你了

我希望其他未初始化的值,如array[9]返回0

未初始化的变量没有初始化。[1]不归零,不归其他任何值。你可以得到任何东西。它甚至可能会杀死你的程序来使用这些数据。

如果要将数组元素初始化为0,请使用

int array[10] = { 0 };

(如果初始化数组或结构体中的任何元素,则未提供值的任何元素初始化为零。所以这里一个0就足够了。)


  1. 具有静态存储持续时间的变量(全局变量和使用static关键字声明的变量)如果没有提供初始化器,则隐式初始化为零。

1,未初始化,其值有两种可能:一种是全局数组,由编译器初始化为0。一个是本地数组,它是一个随机数。2、初始化的,局部数组和全局数组,初始化的,未赋值的数组赋值为0。

未初始化的数组将不等于0,但可以是任何数字,因此您需要:

int array[10] = {0};

初始化数组为0,a[9]将返回0。

最新更新