はじめに
C言語を始めて半年が経ちました。
変数やポインタの前につける & や * 、たくさん出てくると今でも混乱しがちです…
というわけで、自分のための備忘録も兼ねて、軽くまとめてみたいと思います!
使い方
通常の変数
まずは、通常の変数の場合!
もし以下のようなコードの場合は、、
#include <stdio.h>
int main(void) {
int var;
var = 10;
printf("printf var ... %d\n", var);
printf("printf &var ... %p\n", &var);
return 0;
}
| 通常の変数 |
----|--------------|
var |格納されている値を表示 |
&var|変数自身のアドレスを表示 |
となります。
実行して確認してみると、、
printf var ... 10
printf &var ... 0x7ffeefbff588
このような結果になりました!
通常の変数には、値とアドレスの2つの要素があることが分かります。
ポインタの場合
続いて、ポインタの場合!
もし以下のようなコードの場合は、、
#include <stdio.h>
int main(void) {
int var = 10;
int *ptr; // int型のポインタを宣言
ptr = &var; // ポインタptrに変数varのアドレスを格納
printf("printf var ... %d\n", var);
printf("printf &var ... %p\n", &var);
printf("\n");
printf("printf ptr ... %p\n", ptr);
printf("printf *ptr ... %d\n", *ptr);
printf("printf &ptr ... %p\n", &ptr);
return 0;
}
| ポインタ |
----|--------------|
ptr |格納されている値(変数のアドレス)を表示 |
*ptr|アドレスの先の値(実体)を表示|
&ptr|ポインタ自身のアドレスを表示 |
となります。
赤字で書かれている部分が、ポインタ特有の機能です。
こちらも実際に実行してみると、、
printf var ... 10
printf &var ... 0x7ffeefbff588
printf ptr ... 0x7ffeefbff588
printf *ptr ... 10
printf &ptr ... 0x7ffeefbff580
このような結果になりました。
ポインタptrの値として、変数varのアドレスが入っていることが確認できます。
ポインタが通常モードの時は、対象変数のアドレスを”指し示して”います。
ポインタ特有の機能として、*を頭につけると「アドレスの先にある値」を"指し示す"ことができます。
*がつくと、矢印(ポインタ)がにゅーんと伸びるイメージです。
( *は間接演算子という名前が付いているので、間接モードと呼んでいます。)
#終わりに
実は、今回の投稿が初投稿でした。
理解の一助となると幸いですm(_ _)m