C++、特にポインター演算の理解を深めようとしています。私はかなり頻繁にatoiを使用していますが、それがどのように機能するかについて考えたことはほとんどありません. やり方を調べてみると大体わかるのですが、一つだけ戸惑っています。
オンラインで見つけた解決策の例を次に示します。
int atoi( char* pStr )
{
int iRetVal = 0;
if ( pStr )
{
while ( *pStr && *pStr <= '9' && *pStr >= '0' )
{
iRetVal = (iRetVal * 10) + (*pStr - '0');
pStr++;
}
}
return iRetVal;
}
過去にどのようにアトイが行われたかを理解するのに苦労した主な理由は、キャラクターの比較方法だと思います. 「while」ステートメントは、文字が存在する間、文字が9以下で、0以上であると言っています。この声明は私に2つのことを言います:
- 文字は他の文字と論理的に比較できます (しかし、返される値は何でしょうか?)。
これを調べる前は無意識のうちに知っていたと思いますが、実際に考えたことはありませんでしたが、5 が 6 より小さいのと同じように、「5」の文字は「6」の文字よりも「小さい」ので、比較できます。基本的に、整数としての文字 (この目的のため)。
- while (*sPtr) と *SPtr != 0 はなぜか違います。これは私には当然のことのように思えますが、言葉にすることができないことに気づきました。つまり、これが真実であることは知っていますが、その理由はわかりません。
編集: *pStr - '0' の部分が何をするのかわかりません。
これらの観察を理解するための助けは非常に...役に立ちます!ありがとう!