C++ 如何在C+中将2D数组的空值显示为0+;?
我正在尝试使用2D数组(int-matrix[])显示矩阵。 现在,在我创建了数组之后,我尝试将它显示回来,但是数组中总是有空值,它在空值的位置显示了这个数字(-858993460)。 我做了很多研究,发现数组应该在空值的位置显示0,这是我想要的,但在我的例子中没有 以下是我显示数组值的方式: 当程序运行时,我将1、2和2添加到数组中的特定位置作为输入,并将数组的其余部分留空。 以下是输出:C++ 如何在C+中将2D数组的空值显示为0+;?,c++,C++,我正在尝试使用2D数组(int-matrix[])显示矩阵。 现在,在我创建了数组之后,我尝试将它显示回来,但是数组中总是有空值,它在空值的位置显示了这个数字(-858993460)。 我做了很多研究,发现数组应该在空值的位置显示0,这是我想要的,但在我的例子中没有 以下是我显示数组值的方式: 当程序运行时,我将1、2和2添加到数组中的特定位置作为输入,并将数组的其余部分留空。 以下是输出: { 1 -858993460 -858993460 } { 2 -858993460
{ 1 -858993460 -858993460 }
{ 2 -858993460 -858993460 }
{ -858993460 2 -858993460 }
因此,当您第一次初始化数组时,并不需要数组中包含所有0或空值。在为数组分配内存之前,它将拥有内存中的任何内容。您应该在程序开始时,遍历矩阵并将所有值设置为0,然后继续。您也可以通过调用memset逃脱惩罚。请先将2d数组初始化为0
int arr[10][10] = {0}
为了避免编译器输入任何垃圾值。
temp=r=s=start
-那么为什么要为同一件事使用3个不同的变量呢?这是为了启动链表数据检索过程,所以我将所有值设置为start。矩阵
包含int
类型的值。它不能包含NULL。始终初始化变量:int-matrix[10][10]={0}代码>这不是正确的方法,因为它会消耗更多的内存来初始化变量:int matrix[10][10]={0};Amadeus这是正确的方法再次感谢Amadeus@ahmedselim它不会消耗更多的内存;只要你说int-matrix[20][20]
(或任何维度),内存就会被分配。根据矩阵的范围,使用memset可能比静态初始化慢
;它可能在编译过程中被初始化。如果不初始化它,编译器不会创建垃圾值。或任何值。相反,内存中该点已经存在的任何数据都将被解释为int
s。这就是我对垃圾值的含义。编译器必须输出一些东西。这是垃圾,因为这些值与我们需要的无关。理论上,一个平台具有一个字节内存的状态位,该字节只写(直到初始化)和陷阱(停止程序)如果它是从中读取的,那么使用未初始化的将是一种危险的垃圾值。@Ray:这是幼稚的,通常是错误的。当编译器看到该值从未被初始化或赋值时,它甚至可能不需要访问该内存,而是执行其他操作,如“创建”垃圾值。@AnT访问未初始化的变量是未定义的行为,因此可以自由执行。(仅仅拥有未初始化的变量是完全合法的)。由于它是未定义的,编译器可以自由地将垃圾值写入这些位置。它还可以将垃圾值写入任何其他位置,或爆炸,或打印德国巧克力蛋糕的配方。一旦我们将未定义的行为引入到混合中,假设它将做一件特定的事情,比如创建垃圾值,也不是正确的方法。但你是对的,我们不能依赖任何东西。
{ 1 -858993460 -858993460 }
{ 2 -858993460 -858993460 }
{ -858993460 2 -858993460 }
int arr[10][10] = {0}