Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.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数组编程_C_Arrays - Fatal编程技术网

c数组编程

c数组编程,c,arrays,C,Arrays,我正在读Kochan的C语言编程,第三版 在阵列简介(程序7.1)中,他给出了一个示例: #include <stdio.h> int main(void) { int values[10]; int index; values[0] = 197; values[2] = -100; values[5] = 350; values[3] = values[0] + values[5]; values[9] = va

我正在读Kochan的C语言编程,第三版

在阵列简介(程序7.1)中,他给出了一个示例:

#include <stdio.h>


int main(void)
{
    int values[10];
    int index;

    values[0] = 197;
    values[2] = -100;
    values[5] = 350;
    values[3] = values[0] + values[5];
    values[9] =
    values[5] / 10;
    --values[2];

    for ( index = 0; index < 10; ++index )
        printf ("values[%i] = %i\n", index, values[index]);


    return 0;
}
通过我的四重检验,我使用的是完全相同的代码,它只起到了一半的作用,给了我一些奇怪的额外数字a[1],[4]

values[0] = 197
values[1] = 3210052
values[2] = -101
values[3] = 547
values[4] = 17704192
values[5] = 350
values[6] = 0
values[7] = 0
values[8] = 0
values[9] = 35

我正在使用
cl数组.c-o数组
进行编译。

局部变量未初始化。这意味着数组中未显式初始化的条目将包含不确定值(被视为随机值)


实际上,使用未初始化的变量(或数组的未初始化项)是未定义的行为。

它们未初始化,因此您在控制台输出中看到的是相同内存位置中的内容


您可能想知道为什么第一个示例会为每个未初始化的值和实现中的“wierd number”指定“0”……也许第一个示例分配到了以前从未使用过的内存区域,或者某些编译器决定将每个引用但未初始化的内存寄存器设置为0x0000000,如果您查看本书中提供的cod,它从不设置数组项1或4的值。因此,它们是未定义的,可以是任何值。有些编译器可能会将它们初始化为零,但这不是C规范的一部分,永远不应该依赖它。

我在书中阅读了解释该程序的文本,其中清楚地指出(第100页):

由于从未为数组元素1、4和6到8中的五个元素赋值,因此为它们显示的值没有意义。即使这个项目 输出将这些值显示为零,即任何未初始化变量或数组元素的值 没有定义。出于这个原因,不应假设某一资产的价值 未初始化的变量或数组元素


这就是标准所说的,未初始化的自动局部变量调用未定义的行为。

如果这是本书中的确切代码,我建议找一本不同的书。我试图找到答案,并在发布后找到了相关主题的响应,我将尝试阅读更多内容,不管怎样,如果有人得到了答案,那将非常有帮助。我觉得价值[10]在书中是一个全局变量。如果不是的话,我同意hacks和crashmstr。好的,谢谢。您在代码中发现错误了吗?@user3101661代码中没有明显的错误——错误在于假设未初始化的值为0。他们将成为他们碰巧成为的任何人;它依赖于系统、编译器和编译器开关。如果不设置函数中定义的变量,它会有一些值,但不能保证值是多少。这就解释了一点,我在程序前面编译了[5]个数组,所以[0]-[5]是有问题的,上面的“工作”。谢谢大家!
values[0] = 197
values[1] = 3210052
values[2] = -101
values[3] = 547
values[4] = 17704192
values[5] = 350
values[6] = 0
values[7] = 0
values[8] = 0
values[9] = 35