配列やポインタに関して,担当科目の期末試験で出題した選択肢(2択,4択)問題をリストにしました.
2択
- 配列は,???ための機構である.
- 複数のオブジェクトを取りまとめて一つのオブジェクトとして扱う
- 同一の型のオブジェクトを1個以上連続して記憶域(メモリ)に配置し利用する
- int a[3] = {1, 2}; は,???と同じである.
- int a[2] = {1, 2};
- int a[3] = {1, 2, 0};
- 配列の宣言と初期化に関して,int ??? = {2, 4, 6}; ではエラーとなる.
- a[2]
- a[]
- int a[10]; int *b = a; としたとき,a[5] と???は同じである.
- &b[5]
- *(b + 5)
- int x[5]; int *y = x; とするとき,???は同じオブジェクトを表す.
- *x + 3 と y[3]
- x[3] と *(y + 3)
- int x[3], *y = x; とするとき,yはポインタ変数なので,???はできない.
- sizeof(y) / sizeof(y[0])と書いて配列の要素数を求めること
- y[1]と書いて配列の要素を参照すること
- char s[] = "wakayama"; のあとで,???としてはならない.
- s[8] = 'u';
- s++;
- char ??? = "programming"; と変数を定義したとき,p[7] = '\0'; としてはならない.
- p[]
- *p
- 値渡しを用いて,2つの引数の値を交換する関数を定義し,2つの変数を引数として呼び出すと,変数の値は???.
- 変わる
- 変わらない
- ???を戻り値とするような関数を定義してはならない.
- 配列を含む構造体
- 関数内の自動変数を指し示すポインタ
4択
- int x = 0; int *y = &x; *y = 2; printf("%d", x); とすると,???が出力される.
- 0
- 2
- x
- &x
- 文字列を指し示すポインタ s について,s[strlen(s)] は???と等しい.
- '\0'
- −1
- 文字列の最後の文字
- 文字列の長さ
- char *y = "abcdef"; として変数を定義したとき,???てはならない.
- y = "xyz"; として指し示す文字列を変更し
- char *z = &y[5]; として他のポインタ変数にアドレスを代入し
- y[0] = 'A'; として文字列を書き換え
- y++; として指し示す位置を変え
- 文字列リテラルを直接書き換えることはできないが,???,書き換えることは可能となる.
- "a" のように1文字だけとすれば
- 配列変数の初期化に文字列リテラルを記述すれば
- const char * のポインタ変数を用いれば
- array.h をインクルードすれば
- 関数の???として,配列変数を宣言しても,関数の中ではポインタ変数となる.
- 実引数
- 仮引数
- 自動変数
- 静的変数
- void print_message(char m[]) {...} として関数を定義したとき,関数の中で m は???となる.
- 配列
- ポインタ
- 外部変数
- コマンドライン引数
- struct u { int v; struct u w; }; ではエラーとなる.???とよい.
- w の直後の ; を取り除く
- w の直前に * を付ける
- v の直後の ; を , にする
- 行頭に #define を置く
- malloc をはじめとする記憶域管理関数を用いると,???になってその要素数が分かるような配列(可変長配列)を取り扱うことができる.