回 帖 发 新 帖 刷新版面

主题:请教C,数组的问题。

以下是我写的程序:

# include <stdio.h>

# define students 5

int main(int argc, char** argv)
{
    int student[students];
    int i;
    
    for (i=1;i<=students;i++)
    {
        printf("Number %d\n", i);
        scanf("%d",&student[i]);
    }
    
    do
    {
        printf("Query: \n");
        scanf("%d",&i);
        
        if(i<=0 || i>students) break;
        printf("%d\n", student[i]);
    }while (1);
        
    return 0;
}


在C中, 如果定义了一个a[5]的数组, 是不允许使用a[5]这个元素的。

不过,在我的程序中就可以使用。  不知道为什么, 请指教。

另外,我使用的是GCC编译器。

回复列表 (共6个回复)

沙发

“允许” “可以”是个什么样的定义?是不是用了就会五雷轰顶?

板凳


你把完整的代码发上来啊!就这段定义而言 不能看出什么毛病来啊

3 楼


这程序是干吗用的,
没有看出用途....

4 楼

在越界的数组没有覆盖到关键数据的时候程序还是可以运行下去的,不过不安全,覆盖到关键数据时程序就会挂掉

5 楼

C不做边界检查,你定义的数组访问超界的时候是不会报错的,而会持续读写内存,直到触及保护内存引发操作系统出错。你认为的“可以”使用在这里是客观上能访问,而不是主观上你设计程序的时候这样去做。从主观上,一定要避免这种访问超界的行为,否则出了错也不容易调试

6 楼


在C++中为了提高程序的运行速度,C++语言允许对于数组的跨界使用不做检查!所以编

译时不会报错也就是能使用a[5]了

我来回复

您尚未登录,请登录后再回复。点此登录或注册