【问题标题】:Why can I access to an alement of an array that is not declered? (c) [duplicate]为什么我可以访问未声明的数组元素? (c) [重复]
【发布时间】:2021-11-30 13:38:24
【问题描述】:

如果我声明一个数组或表:

int data[5];
data[12]= 23;
printf("%d",data[12]);
                                          

如果表或数组的位置不存在,为什么程序不给我警告或错误并输出数字 23

【问题讨论】:

标签: c


【解决方案1】:

在高级语言中,有些函数会通过生成异常(例如,Java 中的ArrayIndexOutOfBoundsException)来阻止您访问数组边界之外的内容。

然而,在 C 中,数组是非常原始的——它们只是具有连续地址的元素序列。没有边界检查,因为它只是暴露原始内存。

访问数组的无效索引会导致未定义的行为(这实质上意味着 C 只是说明如果您访问数组边界内的元素会发生什么。未定义会发生什么如果您尝试越界访问。它今天可能有效,但它不是合法的 C,并且不能保证它在您下次运行程序时仍然有效)。

因此,作为开发人员,您有责任不要自责。

【讨论】:

    猜你喜欢
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多