#include <stdio.h>
main() {
char *p = "Hello world";
int *q;
p++;
q = (int*) p;
q++;
printf("\n %s\n%s", p, q);
}
については、このコードの出力を説明しますか? p++
ラインでは、このプログラムの出力はこうですポインタ
#include <stdio.h>
main() {
char *p = "Hello world";
int *q;
p++;
q = (int*) p;
q++;
printf("\n %s\n%s", p, q);
}
については、このコードの出力を説明しますか? p++
ラインでは、このプログラムの出力はこうですポインタ
ことがbyte
型のサイズなので、p
はあなたの文字列の中の「e」を見終わると、あなたは、1によりアドレスp
をインクリメントします。
次に、p
の同じアドレスをq
に割り当てます。したがって、 "e"も表示されます。次に、q
をインクリメントしますが、それは整数(型式int
、マシンの長さは4バイト)へのポインタであるため、4だけインクリメントされます。それで、前に見ていた "e"に4を加えれば、スペース文字を見ることになります。
char *p
は、最初に文字列Hello World
の最初の文字を指します。文p++
は、ポインタp
を文字列の2番目の文字を指すように変更します。これは、ポインタp
をインクリメントしてから文字列を印刷するときにello world
となることを説明しています。
ポインタp
をintへのポインタであるポインタq
に割り当てると、ポインタq
をインクリメントすると、ポインターがworld
を指すように変更されます(スペース文字を指しています)。これは、int
がマシンで4バイト長で、intへのポインタをインクリメントすることにより、ポインタの内容を4バイト増やすためです。したがって、ポインタq
を使用して文字列を印刷すると、が印刷されます。
これは、文字列(p ++とq ++)を格納した後でポインタ変数をインクリメントしたためです。あなたのprintfステートメントの中には、なぜそれが印刷されているのかという文字だけではなく、全体の印刷がプリントされています。あなたが答えを得たことを願っています!
@Jonny Henly改行がなく、2番目の「世界」の前の実際のスペースが重要なので、出力は2行にないことに気付きますか? – AntonH
@AntonH「世界」の前にスペースがあったことに気付かなかった。しかし、\ n%s \ n%s "には2回の改行があります。 –
@JonnyHenly私の間違い。私たちは両方とも正しい1つのものでした、あなたは改行、私はスペース:) – AntonH