創作內容

0 GP

【寫程式教學】c/c++轉型-含指標

作者:♙♲⚙\~O_O~/⚙♲♙│2017-05-02 13:25:49│巴幣:0│人氣:299

隱性轉型
強制轉型
不轉會CE(Compile Error)
亂轉會RE(Runtime Error)
本篇不保證於 visual studio 上適用


前言-為什麼有轉型,為什麼要轉型
電腦所做的一切都是人定出來的,你叫他做甚麼,他就做甚麼。電腦會自動幫你做的事情,是因為別人寫好了。別人沒寫,他就不知道怎麼做。
每個形態的處理方式、儲存方式不盡相同,需要轉換成另一個格式。

強制轉:
(type)(variable)
C++內另一種,運用constructor:type(variable)
隱性轉:
通常發生在 = 或 function傳值 或 運算時
例如:
int a=1;
double b=2;
a=a/b;
上面發生的事情依序是:
  1. a 從 int 轉為 double
  2. 計算 a/b 得 0.5
  3. 將 0.5 轉為 int 放進 a
例如:
void reversePrintString(const string &s)
{
    for(unsigned x=s.size();x;) printf("%c",s[x-=1]);
}

reversePrintString("hello world");
上面發生的事情是:
(const char *) 呼叫 string 的 constructor 轉為 const string

還有更多隱性轉型等你發現(?)
unsigned + int,若 int 為負且絕對值大於 unsigned , cout 會印出甚麼? 例如
unsigned u=2;
int i=-3;
cout<<(u+i);
// 額外思考: printf 呢?

指標
轉型涵蓋指標,有幾件事一定要知道:
任何東西可以轉為void*
0可以直接轉指標沒問題
接著是指標轉型要注意的事項
想想看記憶體分配的時候,假設你的程式要了一塊空間(例如sizeof(unsigned)*1),並把它存進 unsigned *p; *p=1; ,請問: *((long long unsigned*)p) 會等於甚麼?
答案是 undefined (可能會跳 warning ,或是要求嚴格一點, Compile Error )
解釋:
sizeof(unsigned)<sizeof(long long unsigned)
存取到不見得有分配過的空間,系統可能不給你存取,造成 Runtime Error
如果存取成功,你也不知道會拿到甚麼內容 (即 undefined)

運用constructor轉型
舉例 string("aaaa");
又舉例
void f(string s){...}
f("aaaa");


#轉型一堆學問我哪打的完
#要想到打甚麼也很困難
#還是自行多練習,增廣見聞

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3563015
Some rights reserved. 姓名標示-非商業性 2.5 台灣

相關創作

同標籤作品搜尋:C|C++|寫程式

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★agold404 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【玩windows】【資... 後一篇:【玩windows】在資...

追蹤私訊切換新版閱覽

作品資料夾

leon770530巴友
我的小屋首頁共有4篇健身相關證照心得文,對健身有興趣的朋友可以來看看喔!看更多我要大聲說4小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】