とにかく、のような文字列がありますか?たとえば、&"my example\n"
または&{"my example\n"}
?リファレンス演算子を使用してCで文字列へのポインタを取得するには?
編集:基本的な質問には、私が昨晩寝ていないために得るものがあると思う。ああ、とにかく助けてくれてありがとう。
とにかく、のような文字列がありますか?たとえば、&"my example\n"
または&{"my example\n"}
?リファレンス演算子を使用してCで文字列へのポインタを取得するには?
編集:基本的な質問には、私が昨晩寝ていないために得るものがあると思う。ああ、とにかく助けてくれてありがとう。
すでにポインタです:
char *string = "my string\n";
string
はリテラル文字列へのポインタになります。
すでにアドレスです。
例:ここではchar * addr= "my example\n";
、変数addr
は、文字列のアドレスを保持しています。
コードには、文字列定数がポインタとして表示されます。具体的には文字列char *を文字列の最初の文字に置き換えます。
より厳密にするために、文字列リテラルのタイプはconst char[]
です。しかし、const char[]
は暗黙的にconst char*
にキャストできます。だから、簡単に
const char* p = "string";
を割り当てることにより、ポインタを取得することができ、あなたの次の行が
const char* p1 = "string";
であるかどうp1
の--the値はp
の値と同じであることが保証されていないことに注意してください。異なる文字列定数は異なるアドレスを持つかもしれません(しかし、そうする必要はありません)。
p
は、文字列全体ではなく最初の文字へのポインタになります。
もう1つの注意点は、const
をキャストしてchar*
ポインタを取得しようとしないでください。この結果、未定義の動作が発生します。たとえば、コンパイラは文字列リテラルを読み取り専用メモリに格納し、プログラムがクラッシュすることがあります。
"Implicitly cast"は擬似語であり、暗黙の変換よりも実際に強いです。ほとんどのコンテキストでは、配列は、ポインタを使用するかどうかにかかわらず、ポインタに減衰します。 –
さて、適切な説明は[ここ](http://c-faq.com/aryptr/index.html)ですが、私は「場面の背後で」何が起こるかの基本的なアイデアを出したいと思っていました。 – Vlad
実際には配列です( 'sizeof'を適用するとどうなるか見てください)が、ほとんどのコンテキストではポインタに崩壊します。 –
@R ..はいわかりましたが、私はそれをあまりにも複雑にしたくないだけです。質問は、リテラルへのポインタを取得する方法を尋ねていた - それは私が表示しようとしたものです。 – sidyll