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

在第二个语句中printf("%x\n", four_ints[11]),您访问了未为您的程序保留的数组位置 ( int four_ints[4])。也就是说,您无法保证存储在未保留的内存部分上的内容。

于 2013-03-19T19:04:46.270 回答