0

私が購入したc-bookでは、運動プログラムは次のように与えられています。

次のコードスニペットの出力は何ですか?

printf(3+"Welcome"+2);

私が得た答えは私です(TC ++で実行することによって)

しかし、実際のメカニズムを理解することはできません。その背後にある実際のメカニズムを説明してください。

4

3 に答える 3

9

これはポインタ演算と呼ばれます:2 + 3 = 5、そして「me」はオフセット5で始まる文字列の残りの部分です。

PS:その本を捨てなさい。

于 2011-09-18T12:17:02.103 に答える
3

これがコンパイルされると、「ようこそ」文字列はconst char *、文字列の最初の文字を指すになります。Cでは、(他のポインターと同様に)文字列を使用して、ポインター演算を実行できます。これは、ポインター+5がポインターを超えた5つの場所を指していることを意味します。

したがって、( "Welcome" + 5)は、 "W"を過ぎた5文字を、サブストリング"me"にポイントします。

ちなみに、他の人が示唆しているように、これは良い本のようには聞こえません。

于 2011-09-18T12:19:23.473 に答える
2

文字列(のような"Welcome")は、NUL文字で終了する文字の配列です(実際には"Welcome\0")。

あなたがしているのは、その5番目の文字(3 + 2 = 5)にアクセスすることです。この文字は'm'(配列インデックスは0から始まります)です。

printfNUL文字に当たるまで読み続けます。

于 2011-09-18T12:17:18.857 に答える