[解決済み] const char*, char const*, const char const* & 文字列ストレージの違い
質問事項
まず、何が違うのか。
(1) const char*
(2) char const*
(3) const char const*
私はこれを完全に理解していると確信していますが、私の頭に定着させるために、誰かそれぞれについて具体的に文章を与えて欲しいのです。 誰かに突っ込まれるまではいいんだけど、突っ込まれると曖昧になっちゃうんだよねー。
また、文字列リテラルはコンパイラによってどのように格納されるのでしょうか? これは宿題ではなく、面接のためにC言語をブラッシュアップしているのですが、気になる方がいらっしゃいましたら教えてください。
どのように解決するのですか?
1と2は同等であり、ポインタの型を指定することで、const
char
. ポインタ自体は const ではありません。3は"const"を繰り返しているので、無効です。これは、次のようなものです。
const const int
. 順番は関係ないので、次のように言うこともできます。
int const int
.
C99 では、次のように繰り返すことが有効です。
const
というように。しかし、C++では、それを繰り返すことはできません。
また、文字列リテラルはコンパイラによってどのように保存されるのでしょうか?
保存方法は不特定多数です。しかし、コンパイラはプログラムの読み取り専用部分に格納することが許されています。そのため、文字列リテラルに書き込むことはできません。文字列リテラルは、プログラムのライフタイム全体を通じて割り当てられたままであることが保証されています(言い換えれば、静的な保存期間を持つということです)。
<ブロッククオートこれは宿題ではなく、面接のためにC言語をブラッシュアップしているのですが、気になる方はいらっしゃいますか?
CとC++の微妙な違いを意識した方がいい。C99では、上で説明したように
const const int
が許可されています。C89とC++では禁止されています。しかし、C++では、それ自体が const である typedef に適用された場合、冗長な const を導入することができます。
typedef int const cint;
cint const a = 0; // this const is redundant!
テンプレート・パラメーターも同様です。
関連
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み】char * constとconst char *の違いは何ですか?