山口屋~活動日誌~

私生活で主な出来事をピックアップ

C言語 C++ 値 アドレス 参照 ポインタ 演算子 メンバ関数 関数ポインタ const

2024-01-08 13:29:45 | ソフトウェア開発
★変数
 type x → typeの値を格納する値型変数(引数であれば、値がコピーされて代入される)
 type* x → typeのアドレスを格納するポインタ型変数(引数であれば、アドレスがコピーされて代入される)
 type& x → 値の複製はせずに同一のアドレスを指す参照型変数、C++のみ。アドレスを初期化で格納した後は、アドレスの変更はできないが値の変更はできる。引数値、戻り値とした場合、値型変数では値の複製が自動実行されるが、参照型変数では値の複製は自動実行されない。

★演算
 & → アドレス演算子。変数のアドレスを示す。(主として値を格納する変数に対して使用)
 * → 間接演算子。参照先の値を示す。(主としてアドレスを格納する変数に対して使用)

通常変数に対する「&」とポインタ変数に対する「*」がペアになって使用されると考えてよい。変数の値を操作するため、関数の引数としてコピーではなくオリジナルを渡したいときは「&」をつけてポインタ渡しを行い、関数内では「*」を付けて値参照するというものだ。

★構造体メンバ変数の参照方法
 値→「.」(ドット演算子)
 アドレス→「->」(アロー演算子)

配列や構造体では以下の関係が成り立つ。
array[0]⇔*array
struct->member⇔(*struct).member

★メンバの関数ポインタ
 ポインタデータ型 (クラス名::*ポインタ変数名)();
 ※データ型は関数の戻り値に対応させる

これは難しい。下記のサイトに情報があった。
マルペケつくろーどっとコム:->、*、&、[]演算子って奥深い

★メンバ関数のconst修飾子
〇メンバ変数のデータ(値 or ポインタ)の書き換えができなくなる
→ポインタ型の前constは値、後constはアドレスの書換禁止なので、ポインタ型で戻り値がある場合、後constとは意味が重複する。ポインタ型で前constを付けた戻り値にすれば書換できなくなる。
→結果的にメンバ関数内でメンバ変数を書き換えないという意味。

下記のサイトの説明がわかりやすかった。
ドクロモエ:【C++】const の扱いが複雑すぎる
Flat Leon Works:【C++】メンバ関数には必要に応じてconstをつけよう

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« エラー E1696 ソース ファイ... | トップ | C言語 ctype.h 空白文字 issp... »
最新の画像もっと見る

コメントを投稿

ソフトウェア開発」カテゴリの最新記事