プログラミング実習II (2026) 課題

[T9] 第8章 ポインタ

以下の課題を解く上で,C言語によるプログラミング 8.1節の内容をよく読むこと.要点を以下に記す.
(T9_1)

[リスト 8.1] を参考に, 下のプログラムに文を追加して, 変数 a, b, c のアドレスを表示せよ.さらに,これらがメモリ上でどのように格納されているかを下に示すような図を活用して報告せよ

アドレスは, printf の書式指定を %p とすることで,16進数で表示される.

#include <stdio.h>

int main (void)
{
    int a = 1234;
    int b = 5678;
    int c = 7777;

    /* ここに a, b, c のアドレスを表示する文を追加 */

    return 0;
}
(T9_2)

前問(T9_1)で示されたプログラムに対して,[リスト 8.2] を参考にポインタ pa, pb, pc を定義せよ(例えば,int *pa;).次に,それぞれに対して変数 a, b, c のアドレスを代入した上で,それらのアドレス(書式は%p)とそこに格納された値(書式は%d)を表示せよ.

(T9_3)

下のプログラムを実行した上で,int a = ...; から printf 文までの各行について,それぞれ何が行われているかを [リスト 8.2] を参考にしてレポートにて説明せよ.

#include <stdio.h>

int main (void)
{
    int a = 1234;
    int x;
    int *p;

    p = &a;
    x = *p + 4321;

    printf("%p %p %p \n", &a, p, &x);
    printf("%d %d %d \n", a, *p, x);

    return 0;
}
(T9_4)

[リスト 8.3][リスト 8.4][リスト 8.5] のプログラムを実行し,それぞれについてアドレスの変化を観察して,なぜそのような結果が表示されるのかを説明せよ. プログラムの提出はいずれかひとつでよい.なお,sizeof 演算子はデータのバイト数を返すもので,3.2.4項に説明がある.

printf の書式を %zd に変更するか,もしくは sizeof(int)int 型にキャストすること(教科書の正誤表 参照).
(T9_5)

[リスト 8.6] のプログラムを実行し,ポインタに対する加算や,ポインタ同士の減算がどのような計算を行うことになるか説明せよ.

printf の書式を %td に変更するか,もしくは減算の結果を int 型にキャストすること(教科書の正誤表 参照).
(T9_6)

[リスト 8.8]および[リスト 8.9]を入力し実行した上で,ポインタと配列の類似点および相違点についてレポートにて説明せよ. [リスト 8.9]のプログラムを提出すること.

(T9_7)

[リスト 8.12] を入力し実行した上で,このプログラムでなぜ値の交換が正しく行われないかを説明せよ. さらに,C言語によるプログラミング 8.2.4項をよく読んだ上で,関数 swap の引数をポインタとすることで,値の交換を行うプログラムを作成して提出せよ.