- ベストアンサー
printf関数の引数は文字例と決まっているからです。
printf関数は文字列しか引数として受け取りません。 printf("文字列"); では数値を引数にしたらどうでしょう? #include <stdio.h> #main () { printf(1); return 0; } これはコンパイルエラーになります。printf関数の引数は文字列と決まっているからです。 この文章について質問です。 Q.なぜ上の「文字数」はダブルクォーテーションで囲まれているのに、下の「1」にダブルクォーテーションはないのでしょうか? Q.文書を見る限り、Cでは文字列と数値は区別されているように見えますが、なぜでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
C言語に限らずほとんどの言語では文字と数字は区別されます。 "1" これは文字の1 1 これは数字の1 文字列と文字列を計算したらどうなりますか? AB * CD エラーですよね? "12" * "34" これもエラーです。文字列同士の掛け算ですから。 12 * 34 これならOKです。数字同士の掛け算はできますよね。 printf関数は文字列を表示する関数です。文字列です。数字ではダメなんです。 文字列はダブルクォーテーションで囲んでやる必要があるので、 printf("aaa"); ← OK printf("123"); ← OK printf(123); ← NG となります。
その他の回答 (2)
- jacta
- ベストアンサー率26% (845/3158)
> printf(1); は、警告が出ることはあってもコンパイルエラーにはなりません。 Cでは、整数型とポインタ型は相互に暗黙的な型変換を行うことができるからです。
- Wr5
- ベストアンサー率53% (2173/4061)
「数字」と「数値」の違いかと。 "1"は数字(文字列) '1'も数字(文字) 1は数値 です。 > Q.なぜ上の「文字数」はダブルクォーテーションで囲まれているのに、下の「1」にダブルクォーテーションはないのでしょうか? 上の"文字列"はメモリ上のどこかにある"文字列"へのポインタ、 下は数値です。 printf()の第1引数は文字列へのポインタを型としていますから、 数値を指定すると型の違いからコンパイルエラーです。 > Q.文書を見る限り、Cでは文字列と数値は区別されているように見えますが、なぜでしょうか? 型が違うから…といいましょうか。 そういうものだ…って理解しているので改めて聞かれると返答に困りますな。