[解決済み] const int*、const int * const、int const *の違いは何ですか?
2022-03-14 07:09:32
質問
の使い方をいつも間違えてしまいます。
const int*
,
const int * const
および
int const *
を正しく理解することです。できること、できないことを定義したルールはありますか?
代入や関数への受け渡しなど、やっていいことと悪いことを全て知りたいです。
どのように解決するのですか?
逆から読むと(駆動するように 時計回り/スパイラルルール ):
-
int*
- intへのポインタ -
int const *
- const int へのポインタ -
int * const
- int への const ポインタ -
int const * const
- const int への const ポインタ
では、最初の
const
はどちらのタイプでも良いので。
-
const int *
==int const *
-
const int * const
==int const * const
本当にクレイジーになりたいなら、こんなこともできます。
-
int **
- intへのポインタへのポインタ -
int ** const
- int へのポインタへの const ポインタ -
int * const *
- int への const ポインタへのポインタ -
int const **
- const int へのポインタへのポインタ -
int * const * const
- intへのconstポインタ - ...
そして、その意味を明確にするために
const
:
int a = 5, b = 10, c = 15;
const int* foo; // pointer to constant int.
foo = &a; // assignment to where foo points to.
/* dummy statement*/
*foo = 6; // the value of a can´t get changed through the pointer.
foo = &b; // the pointer foo can be changed.
int *const bar = &c; // constant pointer to int
// note, you actually need to set the pointer
// here because you can't change it later ;)
*bar = 16; // the value of c can be changed through the pointer.
/* dummy statement*/
bar = &a; // not possible because bar is a constant pointer.
foo
は定数整数への変数ポインタです。これにより、指し示すものを変更することはできますが、指し示す値を変更することはできません。これはC言語の文字列でよく見られます。
const char
. どの文字列を指しているかを変更することはできても、その内容を変更することはできません。これは、文字列そのものがプログラムのデータセグメントにあり、変更されるべきではない場合に重要です。
bar
は、変更可能な値への定数または固定ポインタです。これは、余分な構文上の糖分を含まない参照と同じです。このため、通常であれば参照を使うところを
T* const
を許可する必要がある場合を除き、ポインタの
NULL
のポインタを使用します。
関連
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された
-
[解決済み】定数ポインタと定数へのポインタの比較【重複