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: ★★ 以下のなかで正しい文字数を返さないコードはどれ?
int strlen(char *s) { int i = 0; for(; str[i]; ++i) ; return i; }
int strlen(char *s) { char *p = s; while( *str++ ) ; return s - p; }
int strlen(char *s) { int len = 0; while( *str++ ) ++len; return len; }
int strlen(char *s) { int i = 0; for(; str[i]; ++str) ; return i; }
Q2: ★ char *ptr = new char[100]; でアロケートしたデータを解放する正しい方法は?
delete [ptr];
free(ptr);
delete [] ptr;
delete(ptr);
Q3: ★★ 環状双方向リンクリスト構造体 struct Node { int val; Node *prev; Node *next}; が定義されていて、Node *ptr1, *ptr2, *ptr3; があり、それぞれの値が 0x100, 0x200, 0x300 で、ptr1 の次が pt2、ptr2 の次が ptr3 とするとき、ptr2->prev, ptr2->next の値はいくつ?
0x200, 0x300
0x100, 0x200
0x200, 0x100
0x100, 0x300
Q4: ★ 構造体 struct Hoge { int val; }; が定義され、Hoge a が定義さているとき、Hoge へのポインタ ptr を宣言し、a のアドレスで初期化するには?
Hoge *ptr = &a;
Hoge *ptr = a;
Hoge *ptr = new a;
Hoge *ptr = *a;
Q5: ★★ char *str の末尾 n 文字を削除するコードはどれ?ただし、str の文字数を len とし、len >= n とする。
str[len] = '\0';
str[n - len] = '\0';
str[len - n] = '\0';
str[n] = '\0';
Q6: ★★ int型で引数無しの関数(例:int foo())へのポインタ型 func_t を typedef で定義するコードはどれ?
typedef int *func_t();
typedef int () *func_t;
typedef int () func_t;
typedef int (*func_t)();
Q7: ★ char *ptr; の指す先が '\0' と等しいかどうかを判定するのは?
if (&ptr == '\0') { ... }
if (ptr == '\0') { ... }
if (*ptr == '\0') { ... }
if (ptr[] == '\0') { ... }
Q8: ★★★ 環状双方向リンクリスト構造体 struct Node { int val; Node *prev; Node *next}; と、Node *ptr1, *ptr2; があるとき、ptr1 の次に ptr2 を相互にリンクするコードはどれか?
ptr1->next = ptr2->next; ptr2->prev = ptr1->prev;
ptr1->next = ptr2->prev; ptr2->prev = ptr1->next;
ptr1->next = ptr2->next->next; ptr2->prev = ptr1->prev->prev;
ptr1->next = ptr2; ptr2->prev = ptr1;
Q9: ★ char b[] = {1, 2, 3, 4}; int *ptr = (int *)b; 実行後の *ptr の値はなにか?
0x03040102
0x01020304
0x02010403
0x04030201
Q10: ★★ int *first, *last; が定義され、どこかの範囲を指している時、first と last の中間地点を求める正しいコードはどれ?
(first + last) / 2;
first + (last - first) / 2;
(int *)(((int)first + (int)last) / 2);
first + ((int)last - (int)first) / 2;


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

最近10人の平均点:3.8
0 2 9 0 1 5 4 4 6 7 (latest)
最近100人の平均点:4.4
最近1000人の平均点:4.7
過去全部(11921人)の平均点:5.0

満点獲得者名と記念コメント:
25/12/14 18:42 名無し さん
25/12/12 10:21 名無し さん
25/12/09 10:06 名無し さん
25/12/04 23:36 名無し さん
25/12/02 18:56 名無し さん
25/11/15 10:41 名無し さん
25/11/12 20:06 名無し さん
25/11/10 02:58 名無し さん
25/11/06 13:36 名無し さん
25/10/31 23:48 名無し さん
25/10/29 16:11 名無し さん
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 名無し さん

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

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