プロが教える店舗&オフィスのセキュリティ対策術

fgetc( )は戻り値が整数ですが、あれは何を指しているのでしょう?
ポインタに代入すれば値を表示できますが・・・。
EOFを返すために整数なのはわかるのですが・・。
アドレスの値ではないですし、デバックして値をみると、二桁の整数でした。
文字コードかなにかなんですかね・・・。
知っているかたいたら教えてください!
よろしくお願いします。

A 回答 (3件)

回答はすでに出ていますが、補足ということで。

。。

要するに、C には「文字」を表す型がないということなんです。
char型は、1バイト長の整数型だと思ってください。

いわゆる半角文字をあらわすのに、アスキーコードでは 0x00~0x7F であらわすことができますので、C ではそれをあらわすのに十分な 1バイトを char型として採用したということです。
しかも、char型の変数にはアスキーコードが数値としてダイレクトに入るので、以下のような処理も可能になっちゃうと。。。

-------------------------------------------------
char hoge;

hoge = 'a';
hoge += 10; // hoge は 'k' になる。
-------------------------------------------------

また、以下の処理はすべて同じことのなります。

-------------------------------------------------
char piyo;

piyo = 'a';
piyo = 0x61;
piyo = 0x97;
-------------------------------------------------

…あと、注意が必要なのは、こんな言語は珍しいということですね。
# C って、いろんな意味で手抜きな言語ですからね。

ふつうの言語は「文字型」の変数には「文字」しか代入できません。

ついでに、C で 1文字の「文字」用に変数を用意する場合、int型にしたほうがいろんな意味で良いと思います。
C の標準関数も、1文字を扱う関数は int型を引数にとったり戻り値にしていますよね。
# そもそも、int型より小さいサイズは、実行時にはすべて int型のサイズに変換されてしまいますし。
# このあたりの話は、「汎整数拡張」でご自分で調べてみてください。 (←あ、逃げた。。。)

じゃあ、「char型の存在意義は?」という話になりますが、文字列 (char型配列) 用に用意されていると思ってもらって良いのではないかな。

「補足」といいながら長くなってしまいましたが、まとめると以下のような感じかな。

◆「文字」は int型であらわす (もちろん char型であらわすことも可能)。
◆「文字列」は char型の配列であらわす。

ご参考まで。
    • good
    • 1
この回答へのお礼

やはり、コンピュータはint型が一番処理しやすいんでしょうね。
これから、アスキーコードの課題をやるのでいい勉強になりました。
文字は数字で変えられるんですね驚きました。
どうも細かいところまでありがとうございました。

お礼日時:2007/11/12 13:03

ご存じかとは思いますが、コンピュータは全て数値で動いてます。


文字に見えるものも全て数値なのです。

fprint()関数なども、数値を文字列として表現するだけで、
内部では数値として扱っているわけです。

char 型の変数といっても中身はタダの整数値ですしね。
char 型でループのカウンタを作って動かしてみると分かります。
    • good
    • 0
この回答へのお礼

>ご存じかとは思いますが、コンピュータは全て数値で動いてます。
>文字に見えるものも全て数値なのです。

ですね。
処理を行うまでのコンピュータに渡される値は1,0までに
なるんですよね。

あんまり型に惑わされないようにします。
ありがとうございました。

お礼日時:2007/11/12 11:07

> fgetc( )は戻り値が整数ですが、あれは何を指しているのでしょう?


> 文字コードかなにかなんですかね・・・

正解。
    • good
    • 0
この回答へのお礼

>正解。

やっぱりですか・・・。
正確なことが本にもサイトにも書いてなかったので。
ありがとうございました。

お礼日時:2007/11/12 11:03

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