0
2

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.

ポインタの話 その1(ポインタ変数の使い方)

Last updated at Posted at 2019-01-26

#ポインタのおはなし
C言語を勉強する中でポインタで挫折するとよく言われています。
でも意外と簡単です。

#ポインタとは
ポインタは、メモリのアドレスを格納する変数のことです。
アドレスは大抵の場合16進数で表示されるはずです。(16進数じゃないケースもあります)
アドレスしかいれることはできません。

#ポインタ変数の宣言と初期化
##宣言方法
ポインタ変数は次のように宣言します。

int *pHoge;

アスタリスクをつけるだけで簡単にポインタ変数を宣言できちゃいます。
pHogeの部分には自分の好きな人の名前を入れてもOKです。

##ポインタ変数の初期化
ポインタ変数の初期化では変数のアドレスを代入します。
初期化の仕方はscanfの使い方と少し似ているので親しみが持ちやすいとおもいます。

int hoge;
int *fuga=&hoge;

&hogeというふうに &+変数名の形式で入力すると変数のアドレスを代入することができます。

#参照の方法
ポインタ変数の中に入っているアドレスの変数を知りたいときはアスタリスクをつけます。
「○○区 ○○○○ ○○マンション102」が入っているポインタ変数に*をつけると住んでいる人の名前が出てくるといったような感じです。

int hoge;
int *fuga=&hoge;

printf("%d",*fuga);
//同じ意味↑↓
printf("%d",hoge);

printf関数で表示している部分は同じです。
*をつけるとポインタ変数の実体が帰ってきます。

#配列とポインタの話
例えば

int hoge[5];
int *p_hoge=&hoge[0];

for(int i=0;i<5;i++){ //配列hogeの初期化のループ
    *p_hoge=0; //アドレスの実体(hoge[0])の値に0を代入
    p_hoge++; //"アドレス"をインクリメント
}

2行目: int p_hoge=&hoge[0]では配列hogeの先頭hoge[0]のアドレスが代入されます。
5行目:*p_hoge=0;でアドレスの実体(hoge[0])に代入しています。
6行目:配列のアドレスは続いてるため、アドレスをインクリメントするとhoge[1]のアドレスになります。

#むすび
実行結果は今度貼っておきます。
今度は、ポインタ変数を使った、引数のアドレス渡しについて書きたいと思います。

0
2
1

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
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?