[問題] char c = 'x'輸出疑問

看板C_and_CPP作者 (ET)時間10年前 (2013/10/25 22:48), 編輯推噓4(4013)
留言17則, 5人參與, 最新討論串1/1
平台為Visual C++ 2010 Express #include<iostream> #include<cstdlib> using namespace std; int main() { char c = 'x'; char *cp = &c; char *cp1 = &c; cout<<" an example of char : *cp = " << *cp << endl <<" cp = " << cp << endl <<" &cp = " << &cp << endl <<" &c = " << &c << endl <<" &cp1 = " << &cp1 << endl << endl; system("PAUSE"); exit( EXIT_SUCCESS); return 0; } 其中 cp 的輸出結果為 cp = x昍昍昍昍p 而 &c 的輸出結果為 &c = x昍昍昍昍p 本來是預期這兩個都是c的記憶體位置 可是出現的是亂碼 想來想去,還是不曉得亂碼的問題如何解決 只好上板求助各位大神 另 char ac[10] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', '\0' }; char *acp = ac; cout<<" an example of char array : &ac[0] = " << &ac[0] << endl; 這裡的 &ac[0] 輸出也想不透為何是 abcdefghi 而不是 &ac 的記憶體位址 懇請各位大神幫忙 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.167.75.230 ※ 編輯: aaqqaaqq 來自: 118.167.75.230 (10/25 22:50) ※ 編輯: aaqqaaqq 來自: 118.167.75.230 (10/25 22:50)

10/25 23:05, , 1F
就多載掉了. 你要印位址可以轉成 void *
10/25 23:05, 1F

10/25 23:11, , 2F
他以為你是字串,所以 char * 型態可以先轉型
10/25 23:11, 2F

10/25 23:12, , 3F
(intptr_t)(void*) 之類的,依照你使用的情形
10/25 23:12, 3F

10/25 23:12, , 4F
厄...請問什麼是"多載掉了"呢?
10/25 23:12, 4F

10/25 23:14, , 5F
不過(intptr_t)(void*)(&c) 之類這種做法不見得一定可以
10/25 23:14, 5F

10/25 23:16, , 6F
google 指標表示法 轉型
10/25 23:16, 6F

10/25 23:18, , 7F
謝謝各位,加上static_cast(&c)就可以成功輸出位址
10/25 23:18, 7F

10/25 23:19, , 8F
謝謝各位,加上static_cast(void*)(&c)就可成功輸出位址
10/25 23:19, 8F

10/25 23:19, , 9F
那可以請教各位前輩第二個疑問嗎,第二個還是想不通...
10/25 23:19, 9F

10/25 23:21, , 10F
第二個問題和第一個一模一樣...
10/25 23:21, 10F

10/25 23:23, , 11F
謝謝各位前輩...我太弱了...連這種也不會
10/25 23:23, 11F

10/25 23:25, , 12F
別在意,應徵programmer職位的碰到類似問題一半人講不出來
10/25 23:25, 12F

10/25 23:32, , 13F
還好啦~~~不會很弱
10/25 23:32, 13F

10/25 23:42, , 14F
請問前輩們,要了解這部分的話,是要看輸入輸出的章節嗎?
10/25 23:42, 14F

10/26 00:58, , 15F
cout 有多載 operator<<(void*) 和 operator<<(char*)
10/26 00:58, 15F

10/26 00:58, , 16F
當你把&c傳進去的時候會先選到 operator<<(char*) 這版本
10/26 00:58, 16F

10/26 00:59, , 17F
然後就被當成一般字串輸出了, 就像 cout<<"hello"; 一樣
10/26 00:59, 17F
文章代碼(AID): #1IQeJH-a (C_and_CPP)