0
int main() {
        int i;
        int four_ints[4];
        char* c;

        for(i=0; i<4; i++) four_ints[i] = 18;

        c = (char*)four_ints;
        for(i=0; i<4; i++) c[i] = 24;

        printf("%x\n", four_ints[2]);
    }

したがって、そのように印刷すると、単に12が印刷されます。

ただし、次のように変更するとprintf("%x\n", four_ints[11])

突然印刷されます28ac90

なぜそれをするのでしょうか?

4

1 に答える 1

3

2 番目のステートメントprintf("%x\n", four_ints[11])では、プログラム用に予約されていない配列の位置にアクセスします ( int four_ints[4])。つまり、メモリの予約されていない部分に何が格納されているかは保証されません。

于 2013-03-19T19:04:46.270 に答える