C語言中的類型轉換——將字符串s轉換為整數型(int)類型


          在講類型轉換之前,我們先要理解下C語言中單引號和雙引號的區別。

          先講雙引號,雙引號就是字符串,我們要證實我們的想法,我選擇寫一段代碼看看開:

       

#include <stdio.h>
int main() { printf("hello,world1"); return 0; }

 然后我們編譯運行看看輸出什么: 

hello,world1

 

  我們的字符串被運行了。我學過Python,前端,我的潛意識認為單引號('')的含義也是代表字符串。讓我們試試

  我們再寫一段代碼:

   

#include <stdio.h>
int main() { printf('1'); return 0; }

 然后我編譯運行,看輸出信息:

 

rgument is of type ‘intextern int printf (const char *__restrict __format, ...);

   我們發現報錯了。

   從這里我們發現單引號和雙引號是有區別的,我們再來寫一段代碼:

   

#include <stdio.h>
int main() { printf("%d",'1'); return 0; }

 然后我編譯運行,看輸出信息:

  

49

輸出的並不是1,而是49。

我對這里很眼熟,有可能剛學習編程的人不知道這是什么。這個49就是ASCII碼

00110001 49 31 1

這條信息的來源源自於:http://www.asciima.com/

自己去查就知道了。

  通過我們的實踐告訴我們,雙引號是字符串,單引號是字符,輸出的是ASCII碼。並不是表面看到的那樣。

  現在我們理解了這個。

   下面我們來看這么一句話,我相信學習過C語言的人肯定接觸過[c-'0']

   它到底是什么意思?怎么這么困擾?今天我們來揭開它的真實面紗。

   我們還是來實踐,用代碼說話:

    

#include <stdio.h>
int main() { printf("%d",'3'-'0'); return 0; }

這里都是單引號,我前面講了,單引號輸出對應的ASCII碼,這里還是ASCII碼嗎?

我編譯運行看下輸出結果:

 

3

 是不是有點驚訝。竟然是3。打開ASCII表,我們看到3的位置是51,0的位置是48。51-48=3,很合理。

下面我們開始講解我們的類型轉換,我直接上代碼,不廢話。

#include <stdio.h>
  int atoi(char s[])   //定義atoi函數,函數()里面的是char類型的數組
 { int i,n=0; for(i=0;s[i]>='0' && s[i]<='9';i++) n=10*n+(s[i]-'0'); return n; } /* 限定s[i]中的值只能是字符串數字不能是字符串 */

/* 第一次循環的時候:i為0,s[0]='1',n=0; n=10*0+('1'-'0')=1 第二從循環的時候:i為1,s[1]='2',n=1; n=1*10+('2'-'0')=12 第三次循環的時候:i為3,s[2]='3',n=12;n=12*10+('3'-'0')=123 循環三次,輸出最終結果123 */
int main() { printf("%d\n",atoi("123"));  //atoi函數調用
   return 0;

然后我們編譯運行看看輸出結果:

123

OK,就這樣!

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM