作者michaeltsai (Fish)
看板NTPU-CSIE97
標題Re: [情報] 今天實習課的第二題
時間Wed Mar 25 01:26:34 2009
※ 引述《eiteki (大英 )》之銘言:
: 引用原文中的扣得然後有些問題
: : ========================CODE==========================
: : template <> char* maxn(char* array[], int n){
: : ...
: : return array[maxi];
: : }
: : ...
: : cout << maxn(s, 5) << endl;
: : ======================================================
: 這是用printf:
: : printf("%x", array[3]);
: 用printf印出記憶體位置時我用的是%p ,
: 印出來的記憶體位置(我自己的電腦)是00417810
: 但是用%x卻印出 417810
%p是表示要用記憶體位置的方式輸出,%x是表示用16進位的方式輸出,兩者皆可。
其實00417810和417810是一樣的,只是因為%p印出的東西就是記憶體位置,
所以前面會自動補0,%x印的未必是記憶體,就像我們用int印出一百二十三,
它會印出123而不是0000123的道理是一樣的。
: 用count:
count:是啥...?
: : 第二種方法還是用cout,不過要加上強制轉型,把回傳值轉成int,
: : 告訴cout,你給我用int輸出!!
: : cout << hex << (int)maxn(s, 5) << endl;
: : 這樣子也是可以的。
: 請問強制轉型是指把原來回傳的值(指向char的pointer)轉成int??
: 如果用上面引用的扣得印出, 則出現417810
: 若把(int)maxn(s, 5)改成(int *)maxn(s, 5)則會印出 00417810
: 回傳的值是一個char指標, 轉成int後是否就使它失去指標的功能
: 但記憶體位置仍然存放在裡面? 所以cout很單純的可以印出
說它它失去指標的功能感覺有點怪怪的,應該是說我強迫用int去解釋
那一格記憶體裡面的東西,所以它不把它當作指標看待。
: 轉成int * 之後它會強制轉為一個指向int的指標
: 這時它卻不會印出指向的字元的ASCII碼??
轉成 int* 概念上好像是對的,但實際上卻不行,至於為什麼,這個我也不太清楚
可能還要查個資料,或是問老師。
不過如果你想印出ASCII碼的話,可以這樣子做:
cout << (int)*maxn(s, 5) << endl;
*會先去對回傳回來的記憶體位置取值,然後再把它轉換成int型態。
: 以上是想分辨其中的不同以及了解原因,另外hex是只用16進位印出嗎?
hex就是16進位的意思。
: cout << (int *)maxn(s, 5) << endl;
: 如此印出仍然出現00417810
: 可以講解一下嗎 謝囉
cout很聰明,當它發現要印出來的是記憶體位置時,它就會自動以hex的方式印出。
所以其實我們加的hex都是多餘的...= =||
以上
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.169.3.161
推 kirinichiban:專業好文推 03/25 01:32
推 eiteki:謝謝 好專業 count是手殘打錯=..= 03/25 17:52