2011-07-12 4 views

答えて

4

すでにポインタです:

char *string = "my string\n"; 

stringはリテラル文字列へのポインタになります。

+0

実際には配列です( 'sizeof'を適用するとどうなるか見てください)が、ほとんどのコンテキストではポインタに崩壊します。 –

+0

@R ..はいわかりましたが、私はそれをあまりにも複雑にしたくないだけです。質問は、リテラルへのポインタを取得する方法を尋ねていた - それは私が表示しようとしたものです。 – sidyll

3

すでにアドレスです。

例:ここではchar * addr= "my example\n";

、変数addrは、文字列のアドレスを保持しています。

1

コードには、文字列定数がポインタとして表示されます。具体的には文字列char *を文字列の最初の文字に置き換えます。

1

より厳密にするために、文字列リテラルのタイプはconst char[]です。しかし、const char[]は暗黙的にconst char*にキャストできます。だから、簡単に

const char* p = "string"; 

を割り当てることにより、ポインタを取得することができ、あなたの次の行が

const char* p1 = "string"; 

であるかどうp1の--the値はpの値と同じであることが保証されていないことに注意してください。異なる文字列定数は異なるアドレスを持つかもしれません(しかし、そうする必要はありません)。

pは、文字列全体ではなく最初の文字へのポインタになります。

もう1つの注意点は、constをキャストしてchar*ポインタを取得しようとしないでください。この結果、未定義の動作が発生します。たとえば、コンパイラは文字列リテラルを読み取り専用メモリに格納し、プログラムがクラッシュすることがあります。

+0

"Implicitly cast"は擬似語であり、暗黙の変換よりも実際に強いです。ほとんどのコンテキストでは、配列は、ポインタを使用するかどうかにかかわらず、ポインタに減衰します。 –

+0

さて、適切な説明は[ここ](http://c-faq.com/aryptr/index.html)ですが、私は「場面の背後で」何が起こるかの基本的なアイデアを出したいと思っていました。 – Vlad

関連する問題