这是atoi()
我试图理解的。为了使用不存在的库进行编译,我将其命名为m()
.
我对几行代码感到困惑,主要是char *
问题。
我的问题列在代码之后:
#include "stdafx.h"
#include <iostream>
using namespace std;
int m( char* pStr ) {
int iRetVal = 0;
int iTens = 1;
cout << "* pStr: " << * pStr << endl; // line 1
if ( pStr ) {
char* pCur = pStr;
cout << "* pCur: " << * pCur << endl;
while (*pCur) {
//cout << "* pCur: " << * pCur << endl; //line 2
pCur++; }
cout << "pCur: " << pCur << endl; //line 3
cout << "* pCur: " << * pCur << endl; //line 4
pCur--;
cout << "pCur: " << pCur << endl; //line 5
while ( pCur >= pStr && *pCur <= '9' && *pCur >= '0' ) {
iRetVal += ((*pCur - '0') * iTens);
pCur--;
iTens *= 10; } }
return iRetVal; }
int main(int argc, char * argv[])
{
int i = m("242");
cout << i << endl;
return 0;
}
输出:
* pStr: 2
* pCur: 2
pCur:
* pCur:
pCur: 2
242
问题:
第 1 行:为什么 cout 是 2?*
pStr
是作为指向char
242 的指针传入的,不应该是 242 吗?
第 2 行:我必须注释掉它,cout
因为它看起来像是处于无限循环中。这while (*pCur)
是什么意思?为什么我们需要这个循环?
第 3 行:为什么它不打印任何内容?
第 4 行:为什么它不打印任何内容?
第 5 行:为什么它减少后现在打印出 2?