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

なぜ文字を扱うchar型の*qはint型のchに*qの中身の文字を代入出来るのですか? int型のchに代入する事で文字、すなわち文字コードが代入する側の値を扱うint型により文字は文字コードを表す値になるため、画像のようにch=*qとおけたのでしょうか?
個人的には型が同じでないと代入できないため、なぜch=*qと書けたのかよくわかりません。

「なぜ文字を扱うchar型の*qはint型」の質問画像

質問者からの補足コメント

  • もう一つ、なぜ*qは宣言されていないのにエラーなく画像のプログラムで使えるのですか?

    「なぜ文字を扱うchar型の*qはint型」の補足画像1
      補足日時:2021/07/28 18:49

A 回答 (5件)

「char型」っていうけど実際には


何らかの (符号つきあるいは符号なしの) 整数を表す型
なんだよ.

「型が同じでないと代入できない」ってことは, たとえば
double x;
x = 0;
は「ダメ」だと思っている, ということでいい?
    • good
    • 1
この回答へのお礼

思っていません。しかし。char型で*qは一文字を表します。そしてchはint型ゆえに整数しか扱えないです。なぜ代入できるかわかりません。
それともわたしの仮説通り

int型のchに代入する事で文字、すなわち文字コードが代入する側の値を扱うint型により文字は文字コードを表す値になるため、画像のようにch=*qとおけた
というわけでしょうか?

お礼日時:2021/07/28 18:53

> 文字は文字コードを表す値になるため、



'Q'なら81、'a'なら97って値を指すだけで、それが文字なのかどうか?ってのは、コンパイラやコンピュータは気にしてくれません。

int a = 'Q';
int b = 'a;
printf("a+b=%d\n", a+b);

で、81+97の結果が得られます。

手元の環境だとwarningすら出ないです。


aから数えて0番スタートで何番目のアルファベットか?ってのを、
char c='f';
int n = (c-'a'); // nは5になるハズ。
とかって計算するのは、よくある方法ですし。


> なぜch=*qと書けたのか

qの指してるアドレスに入ってる0~255の範囲のchar型の値を、chに代入するだけだから。
charからintになるのは暗黙のキャスト?
    • good
    • 0

> 個人的には型が同じでないと代入できないため、なぜch=*qと書けたのかよくわかりません。



強い型付けと弱い型付け:
https://ja.wikipedia.org/wiki/%E5%9E%8B%E3%82%B7 …
    • good
    • 0

>>もう一つ、なぜ*qは宣言されていないのにエラーなく画像のプログラムで使えるのですか?



ちゃんと以下の"char* p"で宣言されています。
for (char* p = str; *p ; p++)
    • good
    • 0

> もう一つ、なぜ*qは宣言されていないのにエラーなく画像のプログラムで使えるのですか?



> 画像のプログラム

*qなんざ宣言されてないけど、プログラムの中でも使われていない。
つまり使われてないから問題が起きない。
    • good
    • 0

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