89
57

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-03-25

はじめに

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

89
57
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
89
57

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?