プログラミング実習II (2025) 課題
[T9] 第8章 ポインタ
(T9_1) [リスト 8.1] を参考に, 下のプログラムに文を追加して, 変数 a, b, c のアドレスを表示するようにせよ.
#include <stdio.h> int main (void) { int a = 1234; int b = 5678; int c = 7777; /* ここに a, b, c のアドレスを表示する文を追加 */ return 0; } |
アドレス 内容 ├──────┤ 3221224176 │ c │ ├ ┤ 3221224177 │ 7777 │ ├ ┤ 3221224178 │ │ ├ ┤ 3221224179 │ │ ├──────┤ 3221224180 │ b │ ├ ┤ 3221224181 │ 5678 │ ├ ┤ 3221224182 │ │ ├ ┤ 3221224183 │ │ ├──────┤ 3221224184 │ a │ ├ ┤ 3221224185 │ 1234 │ ├ ┤ 3221224186 │ │ ├ ┤ 3221224187 │ │ ├──────┤ |
(T9_2) 前問(T9_1)で示されたプログラムに対して,[リスト 8.2] を参考にポインタ pa, pb, pc を定義せよ( 例えば,int *pa; ).次に,それぞれに対して変数 a, b, c のアドレスを代入した上でそれらを表示せよ.
(T9_3) [リスト 8.3][リスト 8.4][リスト 8.5] のプログラムを実行し,それぞれについてアドレスの変化を観察して,なぜそのような結果が表示されるのかを説明せよ.プログラムの提出はいずれかひとつでよい.なお,sizeof 演算子はデータのバイト数を返すもので,3.2.4項に説明がある.
ただし,printf の書式を "%zd" に変更するか,もしくは sizeof(int) を int型にキャストすること → 教科書の正誤表
参照.
(T9_4) [リスト 8.6] のプログラムを実行し,ポインタに対する加算や,ポインタ同士の減算がどのような計算を行うことになるか説明せよ.
ただし,printf の書式を "%td" に変更するか,もしくは減算の結果を int型にキャストすること → 教科書の正誤表
参照.
(T9_5) 下のプログラムを実行した上で,int a = ...; から printf 文までの各行について,それぞれ何が行われているかをレポートにて説明せよ.
#include <stdio.h> int main (void) { int a = 1234; int x; int *p; p = &a; x = *p + 4321; printf("%d %d \n", *p, x); return 0; } |
(T9_6) [リスト 8.8]および[リスト 8.9]を入力し実行した上で,ポインタと配列の類似点および相違点についてレポートにて説明せよ.[リスト 8.9]のプログラムを提出すること.
(T9_7) [リスト 8.12] を入力し実行した上で,このプログラムでなぜ値の交換が正しく行われないかを説明せよ.さらに,関数 swap の引数をポインタとすることで,値の交換を行うプログラムを作成して提出せよ.