這是一個atoi()
我想了解。爲了與不存在的庫進行編譯,我將其稱爲m()
。atoi()方法,char * cout
有幾行代碼我很困惑,主要是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之後就減少了?
從現在開始,while(pCur> = pStr ...)中的另一個快速問題是pCur = 242和pStr = 2,這是怎麼回事? – HoKy22 2013-03-04 22:43:11
@ HoKy22 - 注意'(pCur> = pStr)'和'(* pCur> = * pStr)'之間的區別。在後者中,您取消引用每一側以檢索字符:'2'和'2'。然而在前者中,你正在比較_memory addresses_。這種情況只是簡單地檢查'pCur'沒有指向字符串開頭之前的地址'pStr'。換句話說,你通過'pCur ++'通過字符串向前遍歷,直到找到空字節,然後通過'pCur - '向後遍歷字符串,直到你太過分了('pCur' < 'pStr')。 – 2013-03-04 23:10:55