Help us understand the problem. What is going on with this article?

【C言語ポインタ】&(アンパサンド)や*(アスタリスク)の使い分け

はじめに

C言語を始めて半年が経ちました。
変数やポインタの前につける &* 、たくさん出てくると今でも混乱しがちです…
というわけで、自分のための備忘録も兼ねて、軽くまとめてみたいと思います!

使い方

通常の変数

まずは、通常の変数の場合!
もし以下のようなコードの場合は、、

varSample.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つの要素があることが分かります。

ポインタの場合

続いて、ポインタの場合!
もし以下のようなコードの場合は、、

ptrSample.c
#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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away