0

サイズ 1 の配列を宣言し、その配列に 5 つの要素を格納して取得することはできますか?

配列を宣言し、arr[1]5 つの要素を格納するコードを試してみました。実際に5つの要素を格納することができました! どうだった?

4

1 に答える 1

2

これが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ゼロに設定したにもかかわらず、明示的に変更したことはありません。これは、配列の終わりを超えて書き込むことが影響を受けているためです(との2つの同一のアドレスからわかるようにa[1]x

于 2012-04-13T08:58:32.317 に答える