dポイントプレゼントキャンペーン実施中!

#include <stdio.h>

unsigned int chg(char *);

main()
{
     char m[6]
unsigned int value;
printf("変換する10進数文字列の入力\n");
gets(m);
value =chg(m);
printf("%d", value);
}

unsigned int chg(char *p)
{
unsigned int w;
w = 0;

while(*p){
w = w * 10 + *p - '0';
p++;
}

return w;

}

aを入力すると49が出力されるのですが
unsigned int w;
w = 0;

while(*p){
w = w * 10 + *p - '0';
p++;
}
の部分の処理なのですが
どのように49に変換している
のかが今ひとつ分かりません。
どなたかご教授よろしくお願いいたしますm(_ _)m

A 回答 (1件)

一つずつ順を追って考えれば難しくないと思いますよ。


まず、getsで入力された配列には
m[0]: '4' (0x34)
m[1]: '9' (0x39)
m[2]: '\0' (0x00)
が格納されており、chg にm[]のアドレスが渡ります。
whileでは
*p から、つまり上位の桁から順に処理してます。
最初のループで
 w = w * 10 + '4' - '0'
wは最初に 0が入っています。'4' は 0x34、'0'は 0x30だから、結果 wは 4になりますね。
p++で下の桁に移動し、*pは '9'になります。
 w = w * 10 + '9' - '0'
で、wの 4が10倍され、9が足されます。
これでめでたく 49という数値に変換されました。
最後に、p++で *Pは 0を指すのでループから抜け出します。
    • good
    • 0
この回答へのお礼

早速のお返事有難うございます<(_ _)>
おかげで理解することが出来ました。
本当に有難うございました!

お礼日時:2004/05/24 21:54

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