【C言語】第4章第1回:ポインタとは何か?基本概念を学ぶ
ポインタはC言語で非常に重要な概念です。この章では、ポインタの基本的な仕組みとその役割について学びます。
1. ポインタとは?
ポインタは、変数や配列のメモリアドレスを格納するための特別な変数です。ポインタを使うと、メモリ操作や効率的なデータ処理が可能になります。
例:ポインタの基本的な使い方
#include <stdio.h>
int main() {
int number = 10;
int *ptr = &number; // numberのアドレスをptrに格納
printf("Value of number: %d\n", number);
printf("Address of number: %p\n", (void*)&number);
printf("Value at ptr: %d\n", *ptr); // ptrが指す値を取得
return 0;
}
解説:
&number
:number
のアドレスを取得。int *ptr
: ポインタ変数ptr
を宣言。*ptr
: ポインタptr
が指す値(間接参照)を取得。
2. ポインタの利点と活用例
ポインタを使うことで、次のような操作が可能になります:
- 関数に変数のアドレスを渡す(値渡しではなくアドレス渡し)。
- 動的メモリ管理を行う。
- 配列や文字列を効率的に操作する。
例:関数にアドレスを渡す
#include <stdio.h>
void modifyValue(int *ptr) {
*ptr = 20; // ポインタが指す値を変更
}
int main() {
int number = 10;
printf("Before modification: %d\n", number);
modifyValue(&number); // アドレスを渡す
printf("After modification: %d\n", number);
return 0;
}
解説:
int *ptr
: 関数内でポインタを受け取る。*ptr = 20
: ポインタが指す値を直接変更。- 関数内での変更が、呼び出し元の変数にも反映されます。
3. ポインタの宣言と使用方法
ポインタを宣言する際の基本構文は以下の通りです:
data_type *pointer_name;
ここで:
data_type
: ポインタが指す変数のデータ型。*
: ポインタであることを示す記号。pointer_name
: ポインタ変数の名前。
例:異なるデータ型のポインタ
#include <stdio.h>
int main() {
int a = 5;
float b = 3.14;
char c = 'A';
int *intPtr = &a;
float *floatPtr = &b;
char *charPtr = &c;
printf("Value at intPtr: %d\n", *intPtr);
printf("Value at floatPtr: %.2f\n", *floatPtr);
printf("Value at charPtr: %c\n", *charPtr);
return 0;
}
解説:
- ポインタの型は、指す変数の型と一致させる必要があります。
*
を使って、ポインタが指す値を取得します。
4. 練習問題
以下の課題に挑戦して、ポインタの基本を練習しましょう。
- ポインタを使って、2つの整数の値を入れ替えるプログラムを作成してください。
- 配列の先頭要素のアドレスをポインタに格納し、ポインタを使って配列の全要素を出力するプログラムを作成してください。
- 文字列をポインタで操作して、文字列を1文字ずつ出力するプログラムを作成してください。
5. 練習問題の解答と解説
問1の解答
#include <stdio.h>
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
int main() {
int a = 5, b = 10;
printf("Before swap: a = %d, b = %d\n", a, b);
swap(&a, &b);
printf("After swap: a = %d, b = %d\n", a, b);
return 0;
}
6. まとめ
ポインタは、C言語を学ぶ上で避けて通れない重要な概念です。基本的な使い方をマスターし、効率的なプログラムを書く力を身につけましょう。