広告
↓発売日:2018年09月22日↓
新品価格 |
前回の続きです。
前回は変数に「&」アンパサンドをつけてアドレスを表示するトコロまでをやりました。
ポインタの役わりはアドレスを保存する事でしたね!
ではさっそく保存してみましょう!
/*五日目 プログラム1*/ #include <stdio.h> int main(){ int suji = 20; int* p; p = &suji; printf("変数「suji」は%p番地に保存されてます!\n",&suji); printf("ポインタ変数p = %p\n",p); return 0; }
まずポインタ変数を使う場合は
int* p;
このようにintやcharに「*」アスタリスクをつけるとポインタ変数になります。
(※昔のC言語ではint *pのように変数の方に*をつけていたのですが、新しいC言語ではintやcharの方に*をつけるのが慣例なので当サイトも新しい方に合わせていきたいと思います。)
計算の時の「×」の意味とはぜんぜん関係ないのでご注意ください。
今回は「int suji」のアドレスを保存するワケですが、この時の変数の型が「int」なのでポインタ変数の型も「int」に合わせなくてはいけません。
もちろん「char」型の変数だったらポインタ変数も「char」型にします。
次の行でポインタ変数「p」に変数「suji」のアドレスを保存してます。
p = &suji;
アドレスを表すときは「&」をつけるんでしたね。
そして実行結果を見てみると・・・。
どうやらきちんと保存されてるみたいですね!
変数「suji」のアドレスとポインタ変数「p」に保存したアドレスが同じになってる事が確認できたと思います。
さきほどのプログラムでポインタ変数「p」には変数「suji」のアドレスが保存されました。
という事は!!!
このポインタ変数「p」の方から間接的に変数「suji」の値に触れていくことができるんですね!
このことを
直接変数「suji」から見ないで、こっそりポインタ変数「p」からみるので間接参照(かんせつさんしょう)って言います。
広告
/*五日目 プログラム2*/ #include <stdio.h> int main(){ int suji = 20; int* p; p = &suji; printf("変数「suji」 = %d:アドレス = %p\n",suji,&suji); printf("%p番地に保存されてるデータ = %d\n",p,*p); return 0; }
実行結果を見てみるとアドレスも同じだし、内容も同じだしどうやらうまくいったみたいです。
しかしながらプログラムを見てみるとちょっと理解しづらい部分があると思います。
「p」?、「*p」??
これはですね。何も考えず覚えるしかないです。
まずポインタ変数に保存されてるアドレスを見る時は
p
だけで大丈夫です。
そして間接的に中身を確認する時は
*p
頭に「*」アスタリスクをつけます。
ややこしいですがこれはもう覚えるしかないのでガマンしましょう!
では次に間接的に内容を変えてみましょう!
/*五日目 プログラム3*/ #include <stdio.h> int main(){ int suji = 20; int* p; p = &suji; *p = 100; printf("suji = %d\n",suji); return 0; }
内容を表すには「*」アスタリスクをつけるのでした。
そしてそのまま値を変えてみると・・・。
*p = 100;
元の変数の値も変わってます!
こんな感じでポインタはややこしいです。
このあたりをきちんと理解しながら少しずつ先に進めましょう!
次回はポインタと配列の関係について見ていきたいと思います。
広告
↓発売日:2016年02月29日↓
12歳からはじめる ゼロからのC言語 ゲームプログラミング教室 新品価格 |
↓発売日:2018年06月22日↓
新品価格 |
↓発売日:2018年03月09日↓
新品価格 |
↓発売日:2017年06月14日↓
新品価格 |
↓発売日:2018年05月21日↓
新品価格 |
↓発売日:2017年12月07日↓
新品価格 |
↓発売日:2017年02月08日↓
新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ) 新品価格 |
↓発売日:2017年09月26日↓
新品価格 |