-8
using namespace std;
struct s{
    int tab[9]; 
};

int main(){
    s x;

EDITION初期化後に得たものと同じ出力

(x.tab)[0]=1;
(x.tab)[1]=1;
(x.tab)[2]=1;
(x.tab)[3]=1;
(x.tab)[4]=1;
(x.tab)[5]=1;
(x.tab)[6]=1;
(x.tab)[7]=1;
(x.tab)[8]=1;

    cout<<(x.tab[0]);
}

上記のコードはどのようにして以下の出力を生成しますか?それは解釈可能ですか、それとも未定義の行動ですか?鼻の悪魔ですか?出力行列のサイズはタブ配列のサイズに依存しないため、2番目のものだと思います。

2293236 2293240 2293244 2293248 2293252 2293256 2293260 2293264 2293268
2293272 2293276 2293280 2293284 2293288 2293292 2293296 2293300 2293304
2293308 2293312 2293316 2293320 2293324 2293328 2293332 2293336 2293340
2293344 2293348 2293352 2293356 2293360 2293364 2293368 2293372 2293376
2293380 2293384 2293388 2293392 2293396 2293400 2293404 2293408 2293412
2293416 2293420 2293424 2293428 2293432 2293436 2293440 2293444 2293448
2293452 2293456 2293460 2293464 2293468 2293472 2293476 2293480 2293484
2293488 2293492 2293496 2293500 2293504 2293508 2293512 2293516 2293520
2293524 2293528 2293532 2293536 2293540 2293544 2293548 2293552 2293556

--------------------------------
Process exited with return value 0
Press any key to continue . . .
4

1 に答える 1

6

初期化されていない変数を使用すると、UBが呼び出されます。xを初期化していないので、はい、未定義の動作を呼び出しています。

于 2013-03-11T20:49:49.843 に答える