これは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
は 242 へのポインタとして渡されましたが、char
代わりに 242 ではないはずですか?
2 行目:cout
無限ループに陥っているように見えるので、これをコメントアウトする必要がありwhile (*pCur)
ます。どういう意味ですか? そして、なぜこのループが必要なのでしょうか?
3 行目:何も出力されないのはなぜですか?
4 行目:何も出力されないのはなぜですか?
5 行目:デクリメントされた後に 2 が出力されるのはなぜですか?