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 *p1 = (int *)0x100; int *p2 = (int *)0x110; の時、p2 - p1 の値はいくつですか?
16
2
4
8
Q2: ★★ char *ptr1; char *ptr2; があるとき、それぞれのポインタの指す先のデータを交換するコードはどれ?char t; は宣言済みとする。
t = *ptr1; *ptr2 = *ptr1; *ptr1 = t;
*ptr2 = *ptr1; t = *ptr1; *ptr1 = t;
*ptr1 = *ptr2; t = *ptr1; *ptr2 = t;
t = *ptr1; *ptr1 = *ptr2; *ptr2 = t;
Q3: ★ int *ptr = (int *)0x100; ++ptr; を実行した後の、ptr の値はいくつ?
0x101
0x100
0x102
0x104
Q4: ★★ int型で引数無しの関数(例:int foo())へのポインタ型 func_t を typedef で定義するコードはどれ?
typedef int *func_t();
typedef int (*func_t)();
typedef int () func_t;
typedef int () *func_t;
Q5: ★★ 以下のなかで正しいソースコードはどれ?
void setZero(char * const dst, int n) { for(int i = 0; i < n; ++i) *dst++ = 0; }
void setZero(const char *dst, int n) { for(int i = 0; i < n; ++i) *dst++ = 0; }
const char *dup(const char *s) { char *d = new char[strlen(s)]; char *t = d; while( *d++ = *s++) ; return t; }
void copy(const char *src, const char *dst) { while( *dst++ = *src++ ) {} }
Q6: ★★ 環状双方向リンクリスト構造体 struct Node { int val; Node *prev; Node *next}; が定義されていて、Node *ptr1, *ptr2, *ptr3; があり、それぞれの値が 0x100, 0x200, 0x300 で、ptr1 の次が pt2、ptr2 の次が ptr3 とするとき、ptr2->prev, ptr2->next の値はいくつ?
0x100, 0x200
0x200, 0x100
0x200, 0x300
0x100, 0x300
Q7: ★ char へのポインタ ptr の指す先の次のデータを ch に代入するには?
ch = *++ptr;
ch = *ptr++;
ch = ++*ptr;
ch = *ptr;
Q8: ★★ char *ptr が文字列を指している時、指している先が半角空白またはタブならポインタを進める最も簡潔なコードは以下の中でどれ?
while (*ptr == ' ' || *ptr == '\t') ++ptr;
while (*ptr++ == ' ' || *ptr == '\t') {}
while (*ptr++ == ' ' || *ptr++ == '\t') {}
while (*ptr == ' ' || *ptr++ == '\t') {}
Q9: ★ char へのポインタ ptr の指す先のデータを ch に代入するには?
ch = *ptr;
ch = ptr;
ch = &ptr;
ch = ptr++;
Q10: ★★ 単方向リンクリスト構造体 struct Node { int val; Node *next}; が定義されていて、Node ptr; がリストを先頭を指しているとき、リストの内容を表示するコードはどれ?ただしリストが空の場合は ptr は 0 だとする。
while (ptr != 0) { cout << ptr->val; ptr = ptr->next; }
while ((ptr = ptr->next) != 0) { cout << ptr->val; }
do { cout << ptr->val; ptr = ptr->next; } while (ptr != 0);
do { cout << ptr->val; } while ((ptr = ptr->next) != 0);


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

最近10人の平均点:4.5
6 8 5 4 0 5 3 3 5 6 (latest)
最近100人の平均点:5.6
最近1000人の平均点:4.6
過去全部(11854人)の平均点: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.