私はPythonプログラマーで、K & R本からC言語を学んでいます。これは非常に些細な質問のように見えますが、それにもかかわらず私は困惑しています。 atoi()関数を実装しているK & R(RIP Ritchie!)ブックのコードスニペットを添付します。atoi()関数の理解
atoi(s) /*convert s to integer */
char s[];
{
int i, n, sign;
for (i=0; s[i]==' '||s[i] == '\n' || s[i] == '\t'; i++)
; /* skip whitespace */
sign = 1;
if (s[i] == '+' || s[i] = '-') /* sign */
sign = (s[i++] == '+') ? 1 : -1;
for (n=0; s[i] >= '0' && s[i] <= '9'; i++)
n = 10 * n + s[i] - '0';
return (sign * n);
}
私の質問:
1)ループ」の初が有効characatersの数をカウントする以外に任意の目的を果たしていますか?
2)(1)が真の場合、最初のループは 'i'の値を有効な文字の数に設定します。
たとえば、関数の入力として「2992」と入力します。最初のforループは、iを3に設定するので、残りの関数はどのように機能しますか? 私の基本はすべて乱れているかもしれませんが、どんな助けでも本当に感謝しています。ありがとう、-Creig
私はCが_that_ terribleであることに気づいていませんでした。 –
私は、コードを理解する最も良い方法はデバッガ(例えばgdb)でコードを実行し、段階的に進めることだと思います。また、内部のコードとコメントを読むことで助けになるかもしれません。 – eyalm
@PatrickB .:これは非常に古いものです。C. Modern Cはまったく同じです:)(関数のシグネチャがはるかに明瞭な 'int atoi(const char * s)'を除いて) – Mat