★変数
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をつけよう
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をつけよう
※コメント投稿者のブログIDはブログ作成者のみに通知されます