性格悪い人が優勝

なぜここでCIRCLE_RATIOをキャラクター型のポインターに代入するのですか?ポインターがなければダメなのですか?

「c言語、マクロについて」の質問画像

A 回答 (2件)

ご質問はprintf ( "%sは: %f\n", ptr, PI );行に於いて、"PI"はマクロをそのまま指定しているのに、何故ptrはマクロを変数に置き換えているか...だと思われます。


そこで幾つか実験をしてみました。

●char *ptr = CIRCLE_RATIO;
   |   |   |
   |   |   |
 printf ( "%sは: %f\n", ptr, PI );
●char ptr [] = CIRCLE_RATIO;
   |   |   |
   |   |   |
 printf ( "%sは: %f\n", ptr, PI );

上の2つの例は等価と思われ、どちらでも構わないと思われます。但し、私が使用しているコンパイラGNU Cではどちらも正常にコンパイルできますが、GNU g++では下の例だけがコンパイルできます。 つまりC++では最初の例は通らないことを考慮し、C言語だと言っても一応習慣として下の例をご使用になることをお勧めします。

さて...

●printf ( "%sは: %f\n", CIRCLE_RATIO, PI );

も正常にコンパイルと実行ができました。ソースの作者が何故そうしたかは私にも推測できません。きっと気持ち悪かったのではないでしょうか。
char *ptr ...と宣言することで、これが『文字列なんだ』ということを明確にしたかったのではないでしょうか。でもそれは単なる個人の習慣でしかないですよね...
    • good
    • 0

う〜ん、単純に言うと、char* ってのは文字列を表す、って考えて良いです。


CIRCLE_RATIOの中身は"円周率"って言う文字列ですからね。
    • good
    • 0
この回答へのお礼

なるほど、わかりました。

お礼日時:2022/03/07 00:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!