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: ★★ ヌルターミネイトされた文字列 char *str の文字数を len に設定するのはどれ?ただし len は 0 に初期化されているものとする。
while (*str++ != '\0') ++len;
while (str[len+1] != '\0') { ++len, ++str; }
while (str[len] != '\0') { ++len, ++str; }
while (*++str != '\0') ++len;
Q2: ★★★ 単方向リンクリスト構造体 struct Node { int val; Node *next}; があり、Node *ptr; が3つ以上連続するノードリストを指しているとき、ptr が指すノードの次のノードをリストから削除するコードはどれ?
ptr->next = ptr->next->next;
ptr->next = ptr->next->next->next;
ptr->next = 0;
ptr->next = ptr->next;
Q3: ★ char *ptr が文字列を指しているとき、文字列を cout で表示するには?
cout << (int)ptr;
cout << *ptr;
cout << (void *)ptr;
cout << ptr;
Q4: ★ char *ptr = (char *)0x100; char *ptr2 = ++ptr; を実行した後の、ptr2 の値はいくつ?
0x100
0x102
0x101
0x104
Q5: ★★ 2分木ノード構造体 struct Node { int val; Node *lhs; Node *rhs; }; があるとき、木の内容を全て表示する関数はどれ?
void print(Node *ptr) { if( ptr != 0 ) { cout << ptr->lhs; cout << ptr->val; cout << ptr->rhs; } }
void print(Node *ptr) { print(ptr->lhs); cout << ptr->val; print(ptr->rhs); }
void print(Node *ptr) { if( ptr != 0 ) { print(ptr->lhs); cout << ptr->val; print(ptr->rhs); } }
void print(Node *ptr) { cout << ptr->lhs; cout << ptr->val; cout << ptr->rhs; }
Q6: ★★ int d[] = {0, 1, 2, 3}; int *ptr = d; int **pp = &ptr; *pp += 1; の時、*ptr の値は何か?
1
0
3
2
Q7: ★★ int *first, *last; が定義され、どこかの範囲を指している時、first と last の中間地点を求める正しいコードはどれ?
first + (last - first) / 2;
first + ((int)last - (int)first) / 2;
(int *)(((int)first + (int)last) / 2);
(first + last) / 2;
Q8: ★★ ダミーノード付き環状双方向リンクリスト構造体 struct Node { int val; Node *prev; Node *next}; があり、Node *root; がダミーノードを指しているとき、リストの内容を全て表示するコードはどれ?
Node *ptr = root; while ((ptr = ptr->next) != root) { cout << ptr->val; ptr = ptr->next; }
Node *ptr = root->next; while ((ptr = ptr->next) != root) { cout << ptr->val; }
Node *ptr = root; while ((ptr = ptr->next) != root) { cout << ptr->val; }
Node *ptr = root; while (ptr != root) { cout << ptr->val; ptr = ptr->next; }
Q9: ★ char *ptr が数字文字列を指している時、数字文字を数値に変換するコードはどれ?
*ptr - '\0';
*ptr - '9';
*ptr - '0';
*ptr - 0;
Q10: ★★ 文字列 char *src を char *dst にコピーするソースはどれ?
while ((*++dst = *src++) != '\0') {}
while ((*++dst = *++src) != '\0') {}
while ((*dst++ = *++src) != '\0') {}
while ((*dst++ = *src++) != '\0') {}


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

最近10人の平均点:4.5
5 1 0 6 6 3 8 5 4 7 (latest)
最近100人の平均点:5.5
最近1000人の平均点:4.7
過去全部(11867人)の平均点:5.0

満点獲得者名と記念コメント:
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 名無し さん
24/12/17 08:30 名無し さん
24/12/15 00:07 名無し さん
24/12/13 00:18 名無し さん
24/12/10 23:58 名無し さん
24/12/08 22:09 名無し さん

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

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