這個應該是字串指標的函式吧,但我看不懂這串代碼,特別是第五行那里num+=…的那一行,不知道是什么意思,求大佬細細講解一下





。我用了VS2018編譯了一下,但是就算是復制黏貼,編譯器都說我代碼有誤運行不了,求大佬指點明津
uj5u.com熱心網友回復:
代碼在這里,忘記上傳圖片了
int fun(char *str) {
int num=0;
while(*str) {
num*=10;
num+=*str-'0';
str++;
} return num;
}
int main(){
char *chr="1701";
cout<<fun(chr);
return 0;
}
該程式段的輸出結果是:
uj5u.com熱心網友回復:
大佬們求解謝謝了


uj5u.com熱心網友回復:
看代碼好像沒問題啊num += *str - ‘0’ 相當于 num = num + (*str - ‘0’)
fun就相當于把字串轉成int
比如str = “1701”
num 初始值為 0
while第一次進入回圈
num *= 10 //num = 0
num += *str - ‘0’ // *str是‘1’,所以*str - ‘0’ =
1,num += 1,num=1,所以就相當于把str的第一個字符‘1’轉成了1,其余依次類推
uj5u.com熱心網友回復:
首先num是一個int 整型,第五行翻譯一下就是這樣
num = num + 字符1 - '0'
不同型別不能相加,當然會報錯
uj5u.com熱心網友回復:
為啥*str是’1’呀,不太明白

還有那個num*=10這一步也不太明白
uj5u.com熱心網友回復:
我輸代碼的時候好像不是顯示這一步錯誤,是顯示后面的“1701”那一步錯了,這行代碼是書上的題目,我也好暈整不明白
uj5u.com熱心網友回復:
最后的答案得出來是多少呢
uj5u.com熱心網友回復:
*str為什么是‘1’,自己找本最基礎的入門書來看,然后弄清楚str++后,*str又是什么num *= 10,相當于 num = num * 10
上面說了while第一次回圈結束后,num=1,while第二次回圈
*str為‘7’
num *= 10 //num = num * 10 = 1 * 10 = 10
num += *str - ‘0’ // num = num + (*str -‘0’) = 10 + (‘7’ - ‘0’) = 10 + 7 = 17
所以第二次回圈結束num變為17
依次類推,最后num變為1701,所以最后輸出結果就是1701
補充一點,*=,+=這樣的運算子會隱式轉換為=左邊的型別,所以一般能轉換成功就不會出錯
uj5u.com熱心網友回復:
就是把字串轉換成對應的十進制數字,*str就是當前位置上的字符,在記憶體中存放的是字符的ASCII碼,而數字的字符的ASCII碼不等于數字,所以需要使用 * str 減云‘0’的ASCII碼,這樣就計算也對應的數字。
uj5u.com熱心網友回復:
哦哦明白了明白了謝謝謝謝??uj5u.com熱心網友回復:
好的謝謝明白了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/151803.html
標籤:C++ 語言
下一篇:求!!!
