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) { 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]; ++i) ; return i; }
int strlen(char *s) { int i = 0; for(; str[i]; ++str) ; return i; }
Q2: ★ int data[100] がある時、配列の先頭アドレスを int *ptr に設定するには?
ptr = &data;
ptr = data[];
ptr = data[0];
ptr = data;
Q3: ★ char へのポインタ ptr を宣言し、char へのポインタ src の値で初期化するには?
char *ptr = src[];
char *ptr = &src;
char *ptr = src;
char *ptr = *src;
Q4: ★★ int型で引数無しの関数(例:int foo())へのポインタ ptr がある関数を指しているとき、それをコールするコードはどれ?
ptr();
*ptr;
*ptr();
ptr*();
Q5: ★★ char *str の末尾 n 文字を削除するコードはどれ?ただし、str の文字数を len とし、len >= n とする。
str[n] = '\0';
str[len] = '\0';
str[n - len] = '\0';
str[len - n] = '\0';
Q6: ★★ int型で引数無しの関数(例:int foo())へのポインタ ptr を宣言するのはどれ?
int (*ptr)();
int *ptr();
(int *)ptr();
int *() ptr;
Q7: ★★★ 単方向リンクリスト構造体 struct Node { int val; Node *next}; があり、Node *ptr; が3つ以上連続するノードリストを指しているとき、ptr が指すノードの次のノードをリストから削除するコードはどれ?
ptr->next = ptr->next->next->next;
ptr->next = 0;
ptr->next = ptr->next->next;
ptr->next = ptr->next;
Q8: ★★ 文字列 char *str の先頭に文字cを挿入するコードはどれ?ただし、str の文字数は int len; に入っているものとする。
char *ptr = str; for(int i = 0; i < len; ++i) { *(str+1) = *str; ++str; } *ptr = c;
char *ptr = str; for(int i = 0; i < len; ++i) { *str= *(str-1); ++str; } *ptr = c;
str += len; for(int i = 0; i < len; ++i) { *(str+1) = *str; --str; } *str = c;
str += len; for(int i = 0; i < len; ++i) { *str = *(str-1); --str; } *str = c;
Q9: ★★ typedef char* charptr とし、charptr p1, p2; と宣言した時の p2 の型は何?
char 型
char へのポインタ型
char へのポインタへのポインタ型
void 型
Q10: ★★★ 単方向リンクリスト構造体 struct Node { int val; Node *next}; があり、Node *ptr; が最初のノードへのポインタを指している時、ptr を末尾のノードまで進めるコードはどれ?ただし、リストは空ではなく、末尾のノードの next は 0 とする。
while (ptr != 0) { ++ptr; }
while (ptr != 0) { ptr = ptr->next; }
while (ptr->next != 0) { ptr = ptr->next; }
while (ptr->next != 0) { ++ptr; }


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

最近10人の平均点:5.6
5 3 6 8 6 6 4 10 2 6 (latest)
最近100人の平均点:6.1
最近1000人の平均点:4.5
過去全部(11826人)の平均点:5.0

満点獲得者名と記念コメント:
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 名無し さん
24/11/30 06:35 名無し さん
24/11/27 05:40 名無し さん
24/11/24 06:57 名無し さん

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

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