【C言語】第4章第14回:ポインタ演算の応用
ポインタ演算は、メモリ操作やデータ管理の効率を高める重要な技術です。この章では、ポインタ演算の基礎から応用までを段階的に解説し、実用的なスキルを習得します。
1. ポインタ演算の基本

1.1 ポインタの加算と減算
ポインタ演算では、ポインタを加減算することで配列の要素を操作できます。
例:ポインタの加算を使った配列の操作
#include <stdio.h>
int main() {
int arr[] = {10, 20, 30, 40, 50};
int *ptr = arr; // 配列の先頭を指すポインタ
for (int i = 0; i < 5; i++) {
printf("Element %d: %d\n", i, *(ptr + i)); // ポインタの加算を利用
}
return 0;
}
コードの解説:
int *ptr = arr;
:配列arr
の先頭要素を指します。*(ptr + i)
:ポインタの加算により、配列の各要素にアクセスします。
1.2 ポインタの比較
ポインタは比較することも可能です。同じ配列内のポインタ同士を比較して範囲をチェックできます。
例:ポインタを使った範囲チェック
#include <stdio.h>
int main() {
int arr[] = {10, 20, 30, 40, 50};
int *start = arr; // 配列の先頭
int *end = arr + 4; // 配列の最後の要素
for (int *ptr = start; ptr <= end; ptr++) {
printf("Value: %d\n", *ptr);
}
return 0;
}
コードの解説:
int *start = arr;
:配列の先頭を指すポインタ。int *end = arr + 4;
:配列の最後の要素を指します。ptr <= end
:ループ内でポインタを比較し、範囲内での操作を保証します。
2. ポインタ演算を活用した応用例

2.1 配列の逆順表示
ポインタ演算を使うと、配列を効率的に逆順に表示できます。
例:配列を逆順に表示
#include <stdio.h>
int main() {
int arr[] = {10, 20, 30, 40, 50};
int *start = arr; // 配列の先頭
int *end = arr + 4; // 配列の最後
while (end >= start) {
printf("%d ", *end); // 現在のポインタが指す値を出力
end--; // ポインタをデクリメント
}
printf("\n");
return 0;
}
コードの解説:
end--;
:ポインタをデクリメントして逆順に操作します。- ループ条件として
end >= start
を指定し、範囲内で操作を実行します。
2.2 二次元配列の操作
二次元配列もポインタ演算を使って操作できます。
例:二次元配列のポインタ演算
#include <stdio.h>
int main() {
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
int (*ptr)[3] = matrix; // 配列の行を指すポインタ
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", *(*(ptr + i) + j));
}
printf("\n");
}
return 0;
}
コードの解説:
int (*ptr)[3] = matrix;
:行単位で配列を指します。*(*(ptr + i) + j)
:行ポインタに加算し、列を参照します。
3. 練習問題
以下の課題に挑戦して、ポインタ演算のスキルを深めましょう。
- ポインタ演算を使って、配列の最大値と最小値を求めるプログラムを作成してください。
- ポインタ演算を使って、二次元配列の要素をすべて2倍にするプログラムを作成してください。
- ポインタ演算を使って、文字列を逆順に表示するプログラムを作成してください。
4. 練習問題の解答と解説

問1の解答
#include <stdio.h>
int main() {
int arr[] = {5, 10, 15, 2, 20};
int *ptr = arr;
int max = *ptr, min = *ptr;
for (int i = 0; i < 5; i++) {
if (*(ptr + i) > max) max = *(ptr + i);
if (*(ptr + i) < min) min = *(ptr + i);
}
printf("Max: %d, Min: %d\n", max, min);
return 0;
}
解説:
- ポインタを使用して各要素を比較し、最大値と最小値を更新します。
5. まとめ
ポインタ演算は、C言語プログラミングにおける強力な機能です。今回学んだ知識を応用し、効率的なコードを書く練習をしましょう。