定义了较少元素的数组

时间:2015-10-21 20:54:24

标签: c arrays

我正在从Kochans的书中学习C并且已经完成了这个阵列练习。 它陈述ratingCount[11],但我尝试了不同的值来看看会发生什么。

当我在其中放入3个元素时,程序似乎仍接受ratingCounts[4]及以上的值? 有人可以解释为什么会这样吗?

#include <stdio.h>

int main ()
{
    int ratingCount[3], i, response;

    for (i = 1; i <= 10; ++i) 
        ratingCount[i] = 0;

    printf ("Enter your response\n");

    for (i = 1; i <= 20; ++i)
    {
        scanf (" %d", &response);

        if (response < 1 || response > 10)
            printf ("Bad entry \n");
        else
            ++ratingCount[response]; 
    }

    printf ("\n\n Rating\nNumber of Responses\n");

    for (i = 1; i <= 10; ++i)
    {
        printf ("%d\t\t%d\n", i, ratingCount[i]);         
    }
    return 0;
    }

输出

 Rating
Number of Reponses
1       1
2       1
3       1
4       1
5       1
6       2
7       2
8       4
9       5
10      1
Abort trap: 6

1 个答案:

答案 0 :(得分:3)

  

当我在其中放入3个元素时,程序似乎仍接受ratingCounts [4]及以上的值?有人可以解释为什么会这样吗?

您正在为分配给阵列的内存末尾写入内存。该行动的结果未定义。您很可能会覆盖其他变量的存储空间。

某些编程语言在访问阵列时提供自动边界检查。 C没有。