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 *p1 = (char *)0x100; char *p2 = (char *)0x110; の時、p2 - p1 の値はいくつですか?
2
8
16
4
Q2: ★ ポインタ ptr が構造体 Foo のデータを指しているとき、Foo の m_member メンバの値を取得するには?
*ptr.m_member
*ptr->m_member
ptr->m_member
ptr.m_member
Q3: ★★★ 単方向リンクリスト構造体 struct Node { int val; Node *next}; があり、Node *ptr; が最初のノードへのポインタを指している時、ptr を末尾のノードまで進めるコードはどれ?ただし、リストは空ではなく、末尾のノードの next は 0 とする。
while (ptr != 0) { ++ptr; }
while (ptr->next != 0) { ++ptr; }
while (ptr->next != 0) { ptr = ptr->next; }
while (ptr != 0) { ptr = ptr->next; }
Q4: ★ char b[] = {1, 2, 3, 4}; int *ptr = (int *)b; 実行後の *ptr の値はなにか?
0x02010403
0x03040102
0x04030201
0x01020304
Q5: ★★ 2分木ノード構造体 struct Node { int val; Node *lhs; Node *rhs; }; があり、lhs以下の値 <= va l<= rhs以下の値 になるようソートされている時、木の内容を小さい順に表示する関数はどれ?
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); } }
void print(Node *ptr) { if( ptr != 0 ) { cout << ptr->val; print(ptr->rhs); print(ptr->lhs); } }
void print(Node *ptr) { if( ptr != 0 ) { print(ptr->rhs); cout << ptr->val; print(ptr->lhs); } }
Q6: ★★ 以下のなかで正しいソースコードはどれ?
void copy(const char *src, const char *dst) { while( *dst++ = *src++ ) {} }
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 setZero(char * const dst, int n) { for(int i = 0; i < n; ++i) *dst++ = 0; }
Q7: ★ 2進数の 1010 0011 0101 1111 を16進数に変換すると?
0xa25f
0xa14f
0xf53a
0xa35f
Q8: ★★ char *ptr が文字列を指している時、指している先が半角空白またはタブならポインタを進める最も簡潔なコードは以下の中でどれ?
while (*ptr == ' ' || *ptr++ == '\t') {}
while (*ptr++ == ' ' || *ptr == '\t') {}
while (*ptr++ == ' ' || *ptr++ == '\t') {}
while (*ptr == ' ' || *ptr == '\t') ++ptr;
Q9: ★★★ 環状双方向リンクリスト構造体 struct Node { int val; Node *prev; Node *next}; があり、Node *ptr; が定義されているとき、ptr が指すノードを自分自身とリンクするコードはどれ?
ptr->next = ptr->prev = ptr;
ptr->next = ptr + 1; ptr->prev = ptr - 1;
ptr->next = ptr - 1; ptr->prev = ptr + 1;
ptr->next = ptr->prev = 0;
Q10: ★ char *src; char *dst; があるとき、src の指す先のデータひとつを dst の指す先にコピーするには?
dst = *src;
*dst = *src;
*dst = src;
dst = src;


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

最近10人の平均点:2.5
0 0 0 2 9 0 1 5 4 4 (latest)
最近100人の平均点:4.5
最近1000人の平均点:4.7
過去全部(11919人)の平均点:5.0

満点獲得者名と記念コメント:
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 名無し さん
25/01/06 18:23 名無し さん
25/01/02 15:12 名無し さん
25/01/01 17:39 名無し さん

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

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