ViVi Home > 技術文書 > ポインタ入門 > ポインタ4択問題集


 
Follow @vivisuke Tweet

 

pointer's boot camp は C/C++ のポインタを学習するための4択問題集です。
以下の10問の答えを選択し、画面下部の【採点】を押してください。
※ sizeof(void*) は 4、sizeof(int) は 4、sizeof(short) は 2 とする。
※ 文字エンコーディングは ASCII 、文字列は '\0' を終端とする。
※ バイトオーダはリトルエンディアンとする。

Q1: ★★ 2分木ノード構造体 struct Node { int val; Node *lhs; Node *rhs; }; があり、lhs以下の値 <= va l<= rhs以下の値 になるようソートされている時、木の内容を小さい順に表示する関数はどれ?
void print(Node *ptr) { if( ptr != 0 ) { print(ptr->rhs); cout << ptr->val; print(ptr->lhs); } }
void print(Node *ptr) { if( ptr != 0 ) { cout << ptr->val; print(ptr->rhs); print(ptr->lhs); } }
void print(Node *ptr) { if( ptr != 0 ) { cout << ptr->val; print(ptr->lhs); print(ptr->rhs); } }
void print(Node *ptr) { if( ptr != 0 ) { print(ptr->lhs); cout << ptr->val; print(ptr->rhs); } }
Q2: ★ int *ptr = (int *)0x100; ++ptr; を実行した後の、ptr の値はいくつ?
0x100
0x102
0x104
0x101
Q3: ★ char *ptr; の指す先が '\0' と等しいかどうかを判定するのは?
if (&ptr == '\0') { ... }
if (*ptr == '\0') { ... }
if (ptr == '\0') { ... }
if (ptr[] == '\0') { ... }
Q4: ★★★ 単方向リンクリスト構造体 struct Node { int val; Node *next}; があり、Node *ptr; が最初のノードへのポインタを指している時、ptr を末尾のノードまで進めるコードはどれ?ただし、リストは空ではなく、末尾のノードの next は 0 とする。
while (ptr->next != 0) { ptr = ptr->next; }
while (ptr != 0) { ptr = ptr->next; }
while (ptr != 0) { ++ptr; }
while (ptr->next != 0) { ++ptr; }
Q5: ★ char *foo, bar; と宣言した時、bar の型は何?
char へのポインタ型
char 型
int 型
int へのポインタ型
Q6: ★ 構造体 struct Hoge { int val; }; が定義され、Hoge a が定義さているとき、Hoge へのポインタ ptr を宣言し、a のアドレスで初期化するには?
Hoge *ptr = new a;
Hoge *ptr = &a;
Hoge *ptr = a;
Hoge *ptr = *a;
Q7: ★★ 環状双方向リンクリスト構造体 struct Node { int val; Node *prev; Node *next}; が定義されていて、Node *ptr1, *ptr2, *ptr3; があり、それぞれの値が 0x100, 0x200, 0x300 で、ptr1 の次が pt2、ptr2 の次が ptr3 とするとき、ptr2->prev, ptr2->next の値はいくつ?
0x100, 0x300
0x200, 0x300
0x100, 0x200
0x200, 0x100
Q8: ★ 構造体 struct Hoge { int val; }; が定義されているとき、Hoge データを100個生成し、その先頭アドレスを ptr に代入するには?
Hoge *ptr = new Hoge & 100;
Hoge *ptr = new Hoge * 100;
Hoge *ptr = new Hoge ^ 100;
Hoge *ptr = new Hoge[100];
Q9: ★★ int *first, *last; が定義され、どこかの範囲を指している時、first と last の中間地点を求める正しいコードはどれ?
first + (last - first) / 2;
(first + last) / 2;
first + ((int)last - (int)first) / 2;
(int *)(((int)first + (int)last) / 2);
Q10: ★★ ヌルターミネイトされた文字列 char *str の文字数を len に設定するのはどれ?ただし len は 0 に初期化されているものとする。
while (*++str != '\0') ++len;
while (str[len] != '\0') { ++len, ++str; }
while (*str++ != '\0') ++len;
while (str[len+1] != '\0') { ++len, ++str; }


※ 問題は10問ランダムに表示されます。 総問題数:87

最近10人の平均点:1.1
0 0 0 0 0 0 0 0 2 9 (latest)
最近100人の平均点:4.6
最近1000人の平均点:4.7
過去全部(11914人)の平均点:5.0

満点獲得者名と記念コメント:
25/10/27 06:29 名無し さん
25/10/25 06:28 名無し さん
25/10/11 13:04 名無し さん
25/10/11 12:58 名無し さん
25/10/11 12:58 名無し さん
25/05/31 01:37 名無し さん
25/05/13 16:09 名無し さん
25/05/11 02:47 名無し さん
25/03/13 07:38 名無し さん
25/01/06 18:23 名無し さん
25/01/02 15:12 名無し さん
25/01/01 17:39 名無し さん
24/12/31 07:04 名無し さん
24/12/28 22:20 名無し さん
24/12/26 08:52 名無し さん
24/12/24 04:20 名無し さん
24/12/23 17:24 名無し さん
24/12/21 18:44 名無し さん
24/12/19 16:24 名無し さん
24/12/17 13:42 名無し さん

その他のジャンルの問題もあるよ:

Copyright (C) 2013 by N.Tsuda, All Rights Reserved.