回答受付が終了しました

”1”と'1'の違いは何ですか?わかりやすく詳しく教えて頂ければと思います。

C言語関連846閲覧

2人が共感しています

回答(9件)

1

char c = '1'; '1' は「文字定数」です、 char 変数は、整数の入れ物です、「文字ではありません」 c の値は 整数値0x31 です(ASCII環境下の場合)、「1」という文字ではありません、 0x31 とは文字「1」を表す「文字コード」です 文字は入れられないのですから、 (プログラマが)文字として解釈したい場合は、「文字コードという整数値」を入れる が C言語のお約束です char str[4] = "12"; "12" は「文字列定数」です str[0] の値は '1' str[1] の値は '2' str[2] の値は 0 //terminator 文字列の終わりを示す str[3] の値は 不明 //文字列が必要とする領域より大きいので余っている になります char には、一文字分の文字コードしか入れられませんから 配列にして文字数 +1(terminatorの分)以上の領域を確保します。

1人がナイス!しています

2

これは、二つの問題が混ざっているので複雑です。まずはその二つの問題をより分けましょう。 一つ目の問題は、ダブルクォートとシングルクォートの違いです。引用符には点が二つのものと、点が一つのものがあり、多くんプログラミング言語ではそれらは区別されて異なる意味を持ちます。例えば「文字列データ」を表すのか「単一の文字データ」を表すのかの違いであったり、文字列内に特殊文字を表すエスケープシークエンスを含ませられるかどうかの違いだったり。 二つ目の問題は、コンピュータで文字を扱うときの「半角文字」と「全角文字」の違いです。この例に含まれるダブルクォート、シングルクォート、数字の1のそれぞれについて、コンピューターでは半角文字と全角文字の両方があって、人間には見た目で大差ないように見えますが、コンピュータ内部では文字コードの違いによって全く違うものとして扱われます。「”」と「"」、「’」と「'」、「1」と「1」の違いです。それぞれ全角と半角です。多くのプログラミング言語では半角文字のダブルクォートやシングルクォートには文字列や文字を表すものという機能がありますが、全角文字のほうは他の普通の文字(例えば「あ」や「阿」のような日本語文字)と同様、プログラムの制御上は何の機能も与えられていません。 なので、プログラムを書くときには、全角と半角で見た目がよく似ているようなフォントやエディタを使うのではなく、それらを見た目ではっきり区別できるようなフォントやエディタを使うのが良いですね。 で、ご質問のほうは上記二つの問題がまぜこぜになっていて、どこまでわかっているのか判然としません。この二つの問題を把握したうえで、いったい何と何の違いに焦点を当ててほしいのか、補足で説明し直すと良いと思います。

2人がナイス!しています

0

質問の文字は、” では全角だから、半角の " に変更しないとエラーになる。 1 も全角なんで、半角の 1 すれば、" と ' の違いだけになる。 "1" と '1' とのコンパイラーが認識するデータとしての違いは、 "1" では、" だから文字列扱いになるから、 '1' と '\0' の2バイトで、{ 65, 0 }。 '1' では、' だから半角文字扱いになるから、 '1' の1バイト、{ 0 }。 これに char、int など変数の型の定義が加わる。

0

"1" は、{'1', '\0'} という2つの要素からなるchar型の配列です。 '1' は、文字「1」の文字コードを表すint型の数値です。 例 if (sizeof"1" == 2) printf("ok"); // "321" は {'3', '2', '1', '\0'} のことなので… if ("321"[2] == '1') printf("ok2");