Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么k[5]元素的值被实例化为0?_C - Fatal编程技术网

C 为什么k[5]元素的值被实例化为0?

C 为什么k[5]元素的值被实例化为0?,c,C,这段代码的问题是,当我调试它时,k数组中第5个元素的值被实例化为0。有人能解释为什么会发生这种情况吗?如果你也能调试它,那就太好了 #include <stdio.h> #include <stdlib.h> main () { int k[5]={3,1,7,2,6}; float d=0; int t =3; int i; for (i=0;i<5;i++) { if (k[5]>t)

这段代码的问题是,当我调试它时,k数组中第5个元素的值被实例化为0。有人能解释为什么会发生这种情况吗?如果你也能调试它,那就太好了

#include <stdio.h>
#include <stdlib.h>
main ()
{
    int k[5]={3,1,7,2,6};
    float d=0;
    int t =3;
    int i;
    for (i=0;i<5;i++)
    {
    if (k[5]>t)
        d+=k[i];
    else
      d++;
    }
     d/=2;
    printf("%f\n",d);
    system("pause");
}
#包括
#包括
主要()
{
int k[5]={3,1,7,2,6};
浮点数d=0;
int t=3;
int i;
for(i=0;it)
d+=k[i];
其他的
d++;
}
d/=2;
printf(“%f\n”,d);
系统(“暂停”);
}

k[5]
不存在-它将是
k
的第6个元素,而不是第5个元素。C中的数组是零索引的。这意味着
k
k[0]
k[1]
k[2]
k[3]
k[4]
,就是这样


您造成了未定义的行为,因此任何事情都可能发生。

k[5]
不存在-它将是
k
的第6个元素,而不是第5个元素。C中的数组是零索引的。这意味着
k
k[0]
k[1]
k[2]
k[3]
k[4]
,就是这样

您导致了未定义的行为,因此任何情况都可能发生。

C中的数组都被索引为“0”。这意味着k的第一个元素是k[0],第二个元素是k[1],一直到k的第五个元素是k[4]

在for循环中正确地执行此操作,从i=0到i=4(即“i<5”)

k[5]显示为0,因为恰好在数组后面的内存区域当前设置为0。它可以设置为任何值-这是完全任意的。 通过查看k[5],您看到的是分配给阵列的区域之外的区域,并且看到的是不应该看到的内存部分。在托管编程语言中,这行代码会引发异常,因为您正在做一些绝对不应该做的事情。

C中的数组被索引为“0”。这意味着k的第一个元素是k[0],第二个元素是k[1],一直到k的第五个元素是k[4]

在for循环中正确地执行此操作,从i=0到i=4(即“i<5”)

k[5]显示为0,因为恰好在数组后面的内存区域当前设置为0。它可以设置为任何值-这是完全任意的。
通过查看k[5],您看到的是分配给阵列的区域之外的区域,并且看到的是不应该看到的内存部分。在托管编程语言中,这行代码会引发异常,因为您正在做一些绝对不应该做的事情。

C(和大多数语言)中的数组以0开始索引,而不是1。k[5]是第六个元素。k[0]是第一个元素。C(和大多数语言)中的数组以0开始索引,而不是1。k[5]是第六个元素。k[0]是第一个。它的行为是这样的。我开始为k[5]元素添加一个表。然后,我开始调试,k[5]元素的值是一个完全随机的数字……就像它应该的那样。但是运行下一行,这意味着使用float d命令的行;然后一些魔法发生了,k[5]变成了0!然后,第一次迭代运行,但就在第一次迭代之后,k[5]再次变得随机……就像1032233295@斯科特Mermelstein@johnjohn,当您查看
k[5]
时,任何事情都可能发生。它其实并不存在。您正在为其他一些数据添加别名。在本例中,它听起来像是
&k[5]
可能与
&d
相同,您可以在
d
中看到数据。不过,你不应该依赖这种行为。你为什么担心?我完全同意卡尔的看法。当你访问k[5]时,你所看到的并不重要,因为它不是你应该看到的东西。它可以是任何东西,因为你看到的是你不应该看到的记忆。C是强大的,但同时对于这样的事情来说是危险的——它可以让你查看你不“拥有”的内存,你必须确保不要这样做。k[5]只查看内存中的一些随机位置。你不应该看它。顺便提一下,在你发布的代码中,你是否希望行
if(k[5]>t)
显示
if(k[i]>t)
?我们都在纠正您对内存的无效访问,也许我们应该问:您希望您的代码做什么?即使您执行了一些有效的代码,例如
if(k[4]>t)
,也没有意义-您的
if
子句将始终计算为相同的值-在这种情况下,
true
。一件事,为了确保您完全理解:如果您试图访问数组的第五个元素,即现在设置为6的元素,您希望使用k[4],而不是k[5]。其行为如下。我首先为k[5]元素添加一个表。然后,我开始调试并计算k[5]的值元素是一个完全随机的数…就像它应该是的一样。但是运行下一行,这意味着使用float d命令的行;然后一些魔法发生了,k[5]变成了0!然后,第一次迭代运行,但就在第一次迭代之后,k[5]再次变得随机……就像1032233295@斯科特Mermelstein@johnjohn,当您查看
k[5]
时,任何事情都可能发生。它其实并不存在。您正在为其他一些数据添加别名。在本例中,它听起来像是
&k[5]
可能与
&d
相同,您可以在
d
中看到数据。不过,你不应该依赖这种行为。你为什么担心?我完全同意卡尔的看法。当你访问k[5]时,你所看到的并不重要,因为它不是你应该看到的东西。它可以是任何东西,因为你看到的是你不应该看到的记忆。C是强大的,但同时对于这样的事情来说是危险的——它可以让你查看你不“拥有”的内存,你必须确保不要这样做。k[5]只看了一些