[解決済み] const int*, const int * const, int const * の違いは何ですか?
2022-02-03 13:05:56
質問
の使い方をいつも間違えてしまいます。
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 コマンドが見つかりません。
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】Enterキーを押して続行する
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】定数ポインタと定数へのポインタの比較【重複