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 b[] = {1, 2, 3, 4}; int *ptr = (int *)b; 実行後の *ptr の値はなにか?
0x02010403
0x01020304
0x04030201
0x03040102
Q2: ★ int へのポインタへのポインタ pptr を宣言するには?
int pptr**;
int **pptr;
int pptr;
int *pptr*;
Q3: ★★ 以下のなかで正しい文字数を返さないコードはどれ?
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; }
Q4: ★★ 以下の中で明らかに間違っているコードはどれか?
if (*ptr == '\\' && ptr + 1 < endptr ) ptr += 2;
char *ptr = new char[100]; int len = strlen(ptr);
for (int i = 0; i < len; ++i) { *(str + len - i + 1) = *(str + len - i); }
for (int i = 0; i < n; ++i) { sum += *data++; }
Q5: ★★ 以下のなかで正しいソースコードはどれ?
const char *dup(const char *s) { char *d = new char[strlen(s)]; char *t = d; while( *d++ = *s++) ; return t; }
void setZero(const char *dst, int n) { for(int i = 0; i < n; ++i) *dst++ = 0; }
void setZero(char * const dst, int n) { for(int i = 0; i < n; ++i) *dst++ = 0; }
void copy(const char *src, const char *dst) { while( *dst++ = *src++ ) {} }
Q6: ★ x の値を 123 にしたい。以下のソースの (※) 部分には何と記述すればよいか?int x = 0; int *ptr = &x; (※) = 123;
ptr
ptr[1]
**ptr
*ptr
Q7: ★ char *ptr; の指す先が '\0' と等しいかどうかを判定するのは?
if (*ptr == '\0') { ... }
if (ptr[] == '\0') { ... }
if (ptr == '\0') { ... }
if (&ptr == '\0') { ... }
Q8: ★★ 2分木ノード構造体 struct Node { int val; Node *lhs; Node *rhs; }; があり、lhs以下の値 <= va l<= rhs以下の値 になるようソートされている時、木の内容を小さい順に表示する関数はどれ?
void print(Node *ptr) { if( ptr != 0 ) { print(ptr->rhs); cout << ptr->val; print(ptr->lhs); } }
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); } }
Q9: ★ 構造体 struct Hoge { int val; }; が定義されているとき、Hoge データを100個生成し、その先頭アドレスを ptr に代入するには?
Hoge *ptr = new Hoge[100];
Hoge *ptr = new Hoge & 100;
Hoge *ptr = new Hoge ^ 100;
Hoge *ptr = new Hoge * 100;
Q10: ★ int data[100] がある時、配列の先頭アドレスを int *ptr に設定するには?
ptr = data[0];
ptr = data;
ptr = data[];
ptr = &data;


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

最近10人の平均点:0.0
0 0 0 0 0 0 0 0 0 0 (latest)
最近100人の平均点:4.6
最近1000人の平均点:5.1
過去全部(8204人)の平均点:5.0

満点獲得者名と記念コメント:
20/03/15 23:43 名無し さん
20/03/13 10:54 名無し さん
20/03/10 03:08 名無し さん
20/03/03 19:00 Y さん
20/03/01 08:55 名無し さん
20/02/24 08:08 名無し さん
20/02/09 13:53 名無し さん
20/02/05 17:02 名無し さん
20/02/04 14:06 名無し さん
19/12/26 04:38 名無し さん
19/12/23 20:01 名無し さん
19/12/23 12:49 名無し さん
19/12/20 11:34 名無し さん
19/12/18 04:25 名無し さん
19/12/17 10:48 名無し さん
19/12/16 13:26 名無し さん
19/12/15 10:32 名無し さん
19/12/14 10:58 名無し さん
19/12/13 07:18 名無し さん
19/12/12 10:56 名無し さん

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

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