C言語を勉強していて、いくつか質問ができたので質問させてください。
質問は、3つあります。
『質問1』
#include <stdio.h> int main(void){ int a = 0; char b[] = "NET"; char c[4]; while(b[a] != '\0') { c[a] = b[2-a]; a++; } c[3] = '\0'; printf("%sは逆から読むと%s\n", b, c); return 0; }
教科書で文字列の勉強をしていて、この処理でNETからTENに反転するというのは理解できました。
ただ8行目のwhile文でbが\0以外である限り処理を繰り返すと書いてあるのに、{}内の処理内容では一生\0にならない内容になっていますよね。
これは、処理内容の結果が反転してTENになったら、それ以降のwhile文の処理は、コンピュータ内では勝手に終わっていると考えればいい(深く考えなくていい)のでしょうか?
それともこのwhile文には、何かこう書かなければ他に処理できない意図のようなものがあるのでしょうか?
『質問2』
#incude<stdio.h> int main(void){ char x = 4, y; char *p = &x; y = *p; printf("変数xの値は%dです\n", y); return 0; }
ポインタの勉強をしていて、冒頭のchar x = 4, y; という宣言が出てきたのですが、これは
char x = 4 char x = y
という宣言をまとめて書いたものなのでしょうか?それとも違うのでしょうか?
ここがわからなくて、何となく腑に落ちません。
『質問3』
#include <stdio.h> int main(void) { char s[] = "I love cat and dog."; //探す対象の文字列 char c = 'a'; //探す文字 char *p = s; int n = 0; printf(" \" %s \" の中から \' %c \' を探します\n", s, c); while (*p != '\0') { if (*p == c) { printf("%d文字目で発見しました\n", p-s+1); n++; } p++; } if (n == 0) printf("1つも見つかりませんでした\n"); else printf("全部で%d個見つかりました\n", n); return 0; }
こちらも処理内容は、一通り下まで読んだのですが、13行目の p-s+1 だけが、どういう計算なのかわかりませんでした。
後半の+1は、文字列の添字が0から始まるために"何文字目"を計算する際には1足す必要があるということだったと思うのですが、前半は全く理解できず、正直、p-s はどこをどう計算してるのか、お恥ずかしくも全部わかりません。
以上、3つが質問になります。
よろしければご教授していただきたいです。
よろしくお願いします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/16 13:51