C言語のポインタは、変数のメモリアドレスを直接扱う強力な機能で、正しく理解すると効率的なプログラムが書けます。初学者がつまずきやすいのは、ポインタ宣言、間接参照、配列との組み合わせです。
ポインタの基本構造
ポインタは「アドレスを格納する変数」です。例えば、int型のポインタはint型変数のアドレスを保持できます。
int a = 10;
int *p = &a; // 'p'は'a'のアドレスを持つポインタ
printf("aの値=%d\n", *p); // 間接参照で値を取得
配列とポインタの関係
配列名は先頭要素のアドレスを指すため、ポインタとして扱うことができます。
int arr[3] = {1,2,3};
int *ptr = arr; // 配列名は先頭アドレス
for(int i=0;i<3;i++) {
printf("arr[%d]=%d\n", i, *(ptr+i)); // ポインタ演算でアクセス
}
関数にポインタを渡す
関数に変数のアドレスを渡すことで、値を直接変更できます。
void increment(int *num) {
(*num)++;
}
int main() {
int val = 5;
increment(&val);
printf("val=%d\n", val); // 出力は6
}
ポインタ配列と文字列
文字列の配列や複数文字列の管理にもポインタが便利です。
char *names[] = {"Alice", "Bob", "Charlie"};
for(int i=0;i<3;i++) {
printf("%s\n", names[i]);
}
まとめと実践のポイント
ポインタはメモリ操作の基礎であり、配列、関数呼び出し、文字列管理に必須です。学習のコツはまず簡単な変数へのポインタ、次に配列や関数を組み合わせて実験することです。
この基本を押さえると、複雑なデータ構造や効率的なメモリ操作にも対応できるようになります。


コメント