私が購入したc-bookでは、運動プログラムは次のように与えられています。
次のコードスニペットの出力は何ですか?
printf(3+"Welcome"+2);
私が得た答えは私です(TC ++で実行することによって)
しかし、実際のメカニズムを理解することはできません。その背後にある実際のメカニズムを説明してください。
私が購入したc-bookでは、運動プログラムは次のように与えられています。
次のコードスニペットの出力は何ですか?
printf(3+"Welcome"+2);
私が得た答えは私です(TC ++で実行することによって)
しかし、実際のメカニズムを理解することはできません。その背後にある実際のメカニズムを説明してください。
これはポインタ演算と呼ばれます:2 + 3 = 5、そして「me」はオフセット5で始まる文字列の残りの部分です。
PS:その本を捨てなさい。
これがコンパイルされると、「ようこそ」文字列はconst char *
、文字列の最初の文字を指すになります。Cでは、(他のポインターと同様に)文字列を使用して、ポインター演算を実行できます。これは、ポインター+5がポインターを超えた5つの場所を指していることを意味します。
したがって、( "Welcome" + 5)は、 "W"を過ぎた5文字を、サブストリング"me"にポイントします。
ちなみに、他の人が示唆しているように、これは良い本のようには聞こえません。
文字列(のような"Welcome"
)は、NUL文字で終了する文字の配列です(実際には"Welcome\0"
)。
あなたがしているのは、その5番目の文字(3 + 2 = 5)にアクセスすることです。この文字は'm'
(配列インデックスは0から始まります)です。
printf
NUL文字に当たるまで読み続けます。