なぜ文字を扱うchar型のqはint型のchにqの中身の文字を代入出来るのですか? int型のchに代入する事で文字、すなわち文字コードが代入する側の値を扱うint方により文字は文字コードを表す値になるため、画像のようにch=*qとおけたのでしょうか? 個人的には型が同じでないと代入できないため、なぜch=*qと書けたのかよくわかりません。
プログラムです。
#include <stdio.h> #include <string.h> int main(void) { char str[] = "str == NULL ? \"(NULL)\" : str"; char* p, * q; int ch; p = str; for (;;) { for (q = p; !(*q == '?' || *q == ':' || *q == 0); q++); ch = *q; *q = 0; printf("|%s|\n", p); if (ch == 0) break; p = q + 1; } }
charなどの型のない* qは一文字の数字や文字を扱います。
もう一つ、疑問があるのですが、なぜforの二周目以降のデバッグでのstr[]の中身はstr == NULLであるのに、一週目のstr[]の中身はstr == NULL ? "(NULL)" : strであるかについてです。
過去にforの一週目のカッコの中身、すなわち(q = p; !(*q == '?' || *q == ':' || *q == 0); q++)のq++は働かないと聞きました。q++が働かなったためにqには0や値すらも入らないためp = q + 1;が動かず、一週目のstr[]の中身はstr == NULL ? "(NULL)" : strなのかなと考えてみたのですが、正しいでしょうか。
編集
cahr型は文字や文字列、文字としての数字や数字の列を表す文字コードなどを数値として扱い、
char* pは文字や文字列や文字としての数字や数字の列の先頭のアドレスを数値として扱い、
*qは一つの文字や文字としての数字を文字コードなどを数値として扱う。そのため、整数などの値を扱うint型のchに数値として渡せるため ch = *q;と出来たのでしょうか?