【プログラミング技術説明】C++でのポインタの話①(初級編)
はじまり
『ふゲだく!』元部員のsayuです!
今回はC++を勉強する上で欠かせないポインタの話をします。
ポインタを理解できず挫折する人は多いと思うので、
なるべく分かりやすくポインタの説明をしようと思います!
※「ここでは64bit基準で話をします」
自身のPCが何bitかわからない場合は以下の手段で確認してみてね!
もし32bitだとしてもポインタの使い方は変わらないから大丈夫だよ!
キーボードで「windowsマーク」と「X」を同時押し後システムをクリック!
そこからデバイスの仕様の中にあるシステム種類からbit数を確認してみてね
著者の理解度は?
現在C++を始めて3年程度の知識ですが、間違いや分からない事があればコメントお願いします。
ターゲット
・ポインタの基礎知識が欲しい!
・すこしでも理解したい!
ポインタとは?
C++ のポインタは、メモリ内の特定のアドレス(場所)を指し示す為の物です。ここで「へ?」ってなる人は多いと思います、なるほど!ってなった人はスゴイ!
まずは一つずつ用語を説明しようと思います
・メモリ
メモリとは、プログラムがデータを一時的に記憶する場所。メモリでも種類はありスタック領域、ヒープ領域などがある、難しくなりすぎる為話さない
・アドレス
アドレスとは、メモリ上に保存されている特定の位置(住所みたいな)を示すための番号です。
この二つがポインタに関連する重要な知識です。
どうしてポインタが必要なのか?
・メモリ効率の向上
・配列や文字列の操作
・関数の引数としての使用
などあるがそれはまた今後説明する事にするね!
コードで説明
コピペしてデバッグするのもありだぜ
#include <iostream>
int main()
{
// 適当な変数を用意する
int hoge = 4;
// 変数ポインタにアドレスを渡す
int* pHoge = &hoge;
// 描画する
std::cout << hoge << "\n"; // 「4」と表示される
// 変数ポインタなのでアドレスが表示される
std::cout << pHoge << "\n"; // アドレスが表示されるが実行の度に変わる
// ここで「pHoge」の先頭に * を付けて表示してみましょう!
std::cout << *pHoge << "\n"; // 「4」と表示される
// ここで中身(hoge)を見てるならその中身に値を代入するとどうなるのだ?
*pHoge = 300;
// あれ?「hoge」の変数には何もしていないのに...
std::cout << hoge << "\n"; // 「300」と表示される
return 0;
}
図で説明
図を使い楽しく理解しよう!
※下記の説明は上記のコードを元に説明を行います。
(ポインタの理解に自信ががある人は見なくてもわかる程度だよ!)
--------------------------------------------------------------------------------------
int hoge = 100;
上記の図ではint型の変数を宣言し値を代入した
--------------------------------------------------------------------------------------
int* pHoge = &hoge;
上記の図ではint*型にint型の先頭アドレスを教えた
--------------------------------------------------------------------------------------
std::cout << pHoge << "\n"; // 「0x00000019ACFFFA74」と表示される
std::cout << *pHoge << "\n"; // 「100」と表示される
上記の図ではアドレス先からデータを見る方法を解説しています。
--------------------------------------------------------------------------------------
*pHoge = 300;
std::cout << hoge << "\n"; // 「300」と表示される
上記の図ではアドレスを使用し値を変更する方法を説明しています。
--------------------------------------------------------------------------------------
まとめ(おすすめ!)
すこし難しくなりすぎたかもしれないので、まとめとしてすべてを図で表現してみました。
最後に
最後まで読んでいただきありがとうございます。
これは初級編なのでこれからもっと詳しくなりたい人向けの記事を書く予定です。
次回は値渡し、ポインタ渡し、参照渡しの説明を記事に書こうと思っています。
各種『ふゲだく!』公式アカウントなど
・X(旧Twitter)
https://twitter.com/fugedaku
・Instagram
https://www.instagram.com/fugedaku_official/
・YouTube
https://www.youtube.com/@fugedaku_official
・福岡情報ITクリエイター専門学校【公式サイト】
https://www.o-hara.ac.jp/senmon/school/fukuoka_it/