🐡

C 言語勉強備忘録2

に公開

ポインタとは?C言語で学ぶメモリの仕組み

ポインタは変数の値ではなく、データの場所(アドレス)を指す特別な変数
アドレスとはメモリ上の番地

メモリ
+-------+   <- 0x1000
|   10  |
+-------+   <- 0x1004
|   20  |
+-------+

ここで p が 0x1000 を指していると考えるとわかりやすいです。

コンピュータのメモリは区分けされていてそれぞれの場所には値(アドレス)が振り分けられています。

ポインタでできること

・アドレスを出力する
・ポインタの指し示す先のデータをコピーしたり変更したりする

ポインタ型の宣言

int *p1;       // int型のデータを指すポインタ
int *p2, *p3;  // 複数宣言も可能

・型ごとに宣言する必要があります
・*は「この変数はポインタです」という意味

ポインタにアドレスを代入する

int x = 10;
int *p = &x; //xのアドレスをpに代入

・&は「変数のアドレス」を取得する演算子

ポインタを使って値を書き換える

#include <stdio.h>

int main() {
    int x = 10;
    int *p = &x; // xのアドレスをpに代入

    printf("xの値: %d\n", x);
    printf("pが指す値: %d\n", *p);

    *p = 30; // ポインタを使ってxの値を変更
    printf("xの値を変更後: %d\n", x);

    return 0;

   //出力結果
    xの値: 10
    pが指す値: 10
    xの値を変更後: 30

ポインタの型について

・基本的に型が一致している方が安全
・型が違う場合、voidポインタ に変換することも可能ですが、注意が必要

ヌル文字とヌルポインタ

・ヌル文字('\0'):文字列の最後に使われる char 型の文字
・ヌルポインタ (NULL):何も指し示さないことを表す特別なポインタ
*文字列で、ヌル文字の代わりにヌルポインタを使ってしまう間違いがよくあるので、注意するようにしてください。

まとめ

・ポインタ = データの場所を示す変数
・&でアドレス取得
・*でポインタ変数
・ポインタを使うと、変数の値を書き換えたり、関数にアドレスを渡したりできる
なかなか難しいですが引き続き頑張ります!

Discussion