c++試験は問題を間違えやすい

1133 ワード

1.for (int i = 0; i = 1; ++i) { cout << 'a'; }このコードは何回実行されますか?答え:何度もありません.2.int a; char b; cin >> a >> b; cout << a << endl << b << endl;入力1.5 c出力結果は何ですか?答え:1改行.しかしintをdoubleに置き換えると1.5改行cとなる.intには小数が存在しないため,コンパイル時に小数点をchar型としてbに渡した.3.int calc(int a[]) { a++; } int main() { int a[2]; calc(a); }このプログラムはエラーを報告しませんが、main関数でa++を実行すると、コードがエラーを報告します.呼び出し関数パラメータは実際には1つのポインタであり、「int a[]はint aに相当する」ため、calc関数ではaがmain関数でa配列のヘッダ要素アドレスを取得し、ポインタにとって加算減算演算を行うことができるが、配列にはできない.(配列名は配列の先頭要素アドレスを指す定数に相当する).4.for (int i = 0; i < 10; ++i, sum += i); cout << sum;このセグメントの出力値を判断する.答え:55 sumはforループの第3部分で演算するので、プログラムはsumを計算するたびにループ条件を満たすか否かを判断するので、sumは最後に10を加算する.5.int a = 1; int * const p = &a; int b = 2; p = &b;はまず上記のコードが間違っています.定義されたpはポインタ定数であり、(int)const pと見なすことができる.すなわち、pはポインタであり、定数であるため、pが指すアドレスは固定的であるべきであるが、pアドレスの値は変更できる.これに対して、以下は定数ポインタである.6.int a = 1; const int * p = &a; *p = 32;というコードも間違っています.(const)(int p)と見なすことができ、pが指す整数型は定数であり、可変ではないため、*pに再付与することはできないが、pが指すアドレスをポインタ定数とは正反対に変更することができる.