数组大小小于无。 存储在它的元素(Array size less than the no. of

2019-10-29 15:34发布

是否有可能宣布规模1的阵列,并能存储5种元素在里面,然后检索这些?

我尝试一个这样的代码,其中我声明阵列arr[1]然后存储5个元素进去。 它实际上是可以存储5个元素! 它曾是怎样的?

Answer 1:

如果这是C(或C ++),则可以很容易地存储更多的元件比阵列的尺寸为:

#include <stdio.h>

int main (void) {
    int x = 0;
    int a[1];    // so that a[0] is the only valid element
    a[1] = 7;    // write beyond end of array

    printf ("x=%d, &a[0]=%p, &a[1]=%p, &x=%p\n", x, &(a[0]), &(a[1]), &x);
    return 1;
}

然而这样做,会导致不确定的行为,很可能改写一些其他的资料片,而不是一个真正的好主意。

在我的系统,上面打印的代码:

x=7, &a[0]=0xbf9bb638, &a[1]=0xbf9bb63c, &x=0xbf9bb63c

尽管我设置x为零,从来没有明确地改变了它。 那是因为写超出了数组的末尾已经影响到它(你可以从两个相同的地址,看到a[1]x )。



文章来源: Array size less than the no. of elements stored in it
标签: arrays