生まれて初めてポインタというものに触れました。以前から「アドレスを指すものらしい」くらいの認識だけはありました。難しい…
1.変数に&演算子をつけると、その変数のアドレスが得られる。「ポインタを生成する」という言い方をする
ポインタ
#include <stdio.h>
int main()
{
int n = 999;
printf("int型nの値は%dで、アドレスは%p", n, &n);
return 0;
}
実行結果
int型nの値は999で、アドレスは00000055f05ffa7c
2.ポインタを格納する専用の変数型がある。その名もポインタ型で、以下のように宣言する
ポインタ型変数の宣言
int a = 10;
int *ptr = &a; //aのアドレスをptrに代入してる
ポインタを関数に渡してポインタの示す変数を操作することが可能。変数そのものを渡すわけではない。
つまり、変数がめちゃくちゃ大きいサイズだったときには、そのデータ自体の受け渡しがなくなるのでプログラム実行がスムーズになる?
これがメリットの1つっぽい
ポインタ型仮引数を使う関数にint型を渡してみたらエラーが起きた。実態はどちらも数値だし、int型とchar型のノリでいけるのでは?と思ったが動かなかった。どうやらコンパイラに安全装置(想定外のアドレスにアクセスすることを防ぐ)が備わっているらしい
3.ポインタの頭に*をつけると、ポインタが指し示す変数そのものを操作できる。ポインタを介して変数を操作することから、間接演算子と呼ばれているらしい
間接演算子*
#include <stdio.h>
void updateValue(int *p) {
*p = 20;
}
int main() {
int a = 10;
printf("updateValue関数を実行する前のaの値は%d\n", a);
updateValue(&a);
printf("updateValue関数を実行。aの値は%d\n", a);
return 0;
}
実行結果
updateValue関数を実行する前のaの値は10
updateValue関数を実行。aの値は20
とりあえず初日はこんな感じでした。難しい~