広告スペース

確認問題(ポインタ)

&演算子、*演算子、NULLポインタ、swap関数の理解度を確認しましょう。

確認問題1 ― &演算子

int a = 42;
int *p = &a;
printf("%d\n", *p);

出力結果は?

42
アドレス値
0
コンパイルエラー
解説: p は a のアドレスを持つポインタ。*p で p が指す先の値 = a の値 = 42 を取得します。

確認問題2 ― ポインタ経由の変更

int a = 10;
int *p = &a;
*p = 20;
printf("a = %d\n", a);

出力結果は?

a = 10
a = 20
a = 0
コンパイルエラー
解説: *p = 20 は p が指す先(= a)に 20 を代入。a の値が書き換わるので a = 20。
ポインタを使えば、変数の値を間接的に変更できます。

確認問題3 ― NULLポインタ

int *p = NULL;
printf("%d\n", *p);

このコードはどうなる?

0
NULL
実行時エラー(Segmentation Fault)
コンパイルエラー
解説: NULLポインタを間接参照(*p)すると未定義動作
多くの環境で Segmentation Fault になります。ポインタ使用前のNULLチェックは必須です。

確認問題4 ― swap関数

void swap(int *a, int *b) {
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
int main(void) {
    int x = 3, y = 7;
    swap(&x, &y);
    printf("x=%d, y=%d\n", x, y);
    return 0;
}

出力結果は?

x=3, y=7
x=7, y=3
x=7, y=7
コンパイルエラー
解説: ポインタ経由で実体を交換。*a = x, *b = y なので、tmp=3, *a=7, *b=3。
結果: x=7, y=3。これがポインタを関数引数に使う典型的なパターンです。

結果

回答してください
ポインタの講座に戻るホームへ

この講座の理解を深めるおすすめ書籍

サイトで動きを理解し、書籍で演習量を補うと効果的です

📘
苦しんで覚えるC言語
MMGames 著
初心者向けの定番入門書。
Amazonで見る
📗
新・明解C言語 入門編
柴田望洋 著
図解が豊富で演習問題も充実。
Amazonで見る
📙
プログラミング言語C 第2版
B.W.カーニハン, D.M.リッチー 著
通称K&R。C言語の原典。
Amazonで見る

※ 上記リンクはアフィリエイトリンクです。購入によりサイト運営を支援いただけます。

この記事をシェア
X(Twitter)でシェア Facebookでシェア LINEで送る はてブ