Skip to content

Week 2: ポインタと配列

日程概要

  • Day 1: ポインタの基礎
  • Day 2: ポインタと配列の関係
  • Day 3: 多次元配列とポインタ配列
  • Day 4: 文字列処理と動的メモリ割り当て
  • Day 5: 実践演習とポインタを使用した高度な技法

Day 1: ポインタの基礎

1.1 ポインタの概念

  • メモリアドレスとは
  • 変数のアドレスを取得する方法(&演算子)
  • ポインタ変数の宣言と初期化

1.2 ポインタの操作

  • 間接参照演算子(*)の使用
  • ポインタの演算(インクリメント、デクリメント)
  • NULL ポインタの概念と安全性

1.3 ポインタと関数

  • 値渡しと参照渡しの違い
  • ポインタを使用した関数パラメータ

演習

  1. 2つの整数値を交換する関数の実装(ポインタを使用)
  2. ポインタを使用して配列の要素を逆順にする関数の実装
  3. NULL ポインタのチェックを含む安全なメモリアクセスの練習

Day 2: ポインタと配列の関係

2.1 配列とポインタの類似性

  • 配列名がポインタとして機能する仕組み
  • 配列要素へのアクセス(添字表記 vs ポインタ演算)

2.2 ポインタ演算と配列インデックス

  • ポインタのインクリメント/デクリメントと配列要素の関係
  • ポインタを使用した配列の走査

2.3 関数パラメータとしての配列

  • 配列を関数に渡す方法
  • ポインタを使用した配列パラメータの宣言

演習

  1. ポインタを使用して配列の合計を計算する関数の実装
  2. 配列の要素を逆順にする関数の実装(ポインタのみを使用)
  3. 二分探索アルゴリズムの実装(ポインタを活用)

Day 3: 多次元配列とポインタ配列

3.1 多次元配列の概念

  • 2次元配列の宣言と初期化
  • 多次元配列のメモリレイアウト

3.2 多次元配列とポインタ

  • 多次元配列の要素へのアクセス(ポインタ表記)
  • 多次元配列を関数に渡す方法

3.3 ポインタの配列

  • ポインタ配列の宣言と使用
  • 文字列の配列(char*の配列)

演習

  1. 2次元配列を使用した行列の加算プログラムの実装
  2. ポインタを使用して2次元配列の転置を行う関数の実装
  3. 文字列の配列をソートするプログラムの作成

Day 4: 文字列処理と動的メモリ割り当て

4.1 文字列の基本

  • C言語における文字列の表現(null終端文字列)
  • 文字列リテラルとchar配列

4.2 文字列操作関数

  • strcpy, strcat, strlen, strcmp の使用方法
  • 安全な文字列操作関数(strncpy, strncat)

4.3 動的メモリ割り当て

  • malloc, calloc, realloc, free 関数の使用方法
  • メモリリークの防止

演習

  1. 文字列を逆順にする関数の実装(ポインタを使用)
  2. 動的に割り当てられた文字列の配列を作成し、ソートするプログラムの実装
  3. 簡単な文字列処理ライブラリの作成(独自の strcat, strcpy 関数など)

Day 5: 実践演習とポインタを使用した高度な技法

5.1 関数ポインタ

  • 関数ポインタの宣言と使用
  • コールバック関数の概念

5.2 ポインタを使用したデータ構造

  • 単方向リンクドリストの実装
  • 二分木の基本実装

5.3 ポインタのポインタ

  • 多重間接参照の概念
  • ポインタのポインタを使用したメモリ割り当て

5.4 実践演習:テキストエディタの基本機能実装

  • 動的メモリ割り当てを使用した行の挿入と削除
  • ポインタを活用したテキスト操作

演習

  1. qsort 関数を使用した汎用ソートプログラムの実装
  2. 単方向リンクドリストを使用した簡単な電話帳プログラムの作成
  3. ポインタのポインタを使用した2次元配列の動的割り当てプログラム

まとめ

  • ポインタと配列の深い関係の理解
  • 多次元配列とポインタ配列の活用方法の習得
  • 動的メモリ割り当てとメモリ管理の重要性
  • 高度なポインタ技法の基礎的な理解と応用

次週の予告

Week 3では、メモリ管理についてより深く学び、スタックとヒープの概念、効率的なメモリ使用方法、そしてメモリリークの防止技術について探求します。