我正在努力提高我对 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;
}
我认为我很难理解过去如何使用atoi的主要原因是角色的比较方式。“while”语句是说当字符存在时,并且字符小于或等于 9,并且大于或等于 0然后执行操作。这句话对我说了两件事:
- 字符可以在逻辑上与其他字符进行比较(但返回值是什么?)。
在我研究这个之前,我想我下意识地知道它,但我从来没有真正想过它,但是“5”字符比“6”字符“小”,就像 5 小于 6,所以你可以比较字符作为整数,本质上(为此目的)。
- 不知何故,虽然 (*sPtr) 和 *SPtr != 0 是不同的。这对我来说似乎很明显,但我发现我无法用语言表达,这意味着我知道这是真的,但我不明白为什么。
编辑:我不知道*pStr - '0'部分会做什么。
理解这些观察结果的任何帮助都会非常...有帮助!谢谢!