プログラミングについて学び始めたばかりなので、Cプログラミングは初めてです。私は以下のプログラムを見ていました-
main( )
{
printf ( 5 + "Good Morning " ) ;
}
そして、上記のプログラムの出力がMorning
. 単純に計算すると、先頭の5文字を飛ばしたように見えます。しかし、なぜ最初の 5 文字をスキップしているのか考えています。
このプログラムについて詳しく説明してくれる人はいますか? 助けてくれてありがとう。
プログラミングについて学び始めたばかりなので、Cプログラミングは初めてです。私は以下のプログラムを見ていました-
main( )
{
printf ( 5 + "Good Morning " ) ;
}
そして、上記のプログラムの出力がMorning
. 単純に計算すると、先頭の5文字を飛ばしたように見えます。しかし、なぜ最初の 5 文字をスキップしているのか考えています。
このプログラムについて詳しく説明してくれる人はいますか? 助けてくれてありがとう。
これはポインタ演算と呼ばれます。
文字列リテラル"Good Morning"
はメモリに格納され、使用すると最初の文字へのポインタが与えられます。その値に 5 を追加すると、ポインタは文字列内の 5 文字になります。
関数が参照するprintf
のはポインタchar const * fmt
だけなので、好きなものを指定できます...ただし、プログラムがそのアドレスのメモリを使用できること、およびヌル終了配列を指していることを確認する必要があります文字の。
"Good Morning "
ですconst char*
。これは、この文字列が配置されるポインタ (メモリの場所) です。「おはよう」 + 5 は、この位置の後の 5 つの場所へのポインターです。+
対称なので、 に"Good Morning " + 5
等しくなり5 + "Good Morning "
ます。