[問題] char* 在記憶體裡是長什麼樣子?

看板C_and_CPP (C/C++)作者 (多重使用者介面)時間15年前 (2010/10/26 12:34), 編輯推噓6(6012)
留言18則, 8人參與, 最新討論串1/2 (看更多)
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 指標不是都是在記憶體裡嗎? 那printf出來的東西,不是都是一堆數字? 那字串是怎麼放到記憶體裡的? 例如"一二三四五六七八",用char*指定之後, 在記憶體是長什麼樣子呀? 還是他是像間接定址一樣,存了兩種東西, 一種是本來的資料,另一種是資料的位址? 不太能理解,為什麼要用char做指標,而不是用int之類的。 自己的理解是,文字怎麼能夠做指標? 記憶體裡不都是數字和abc...,應該沒有其他語系的代號吧? 字串也能用指標的原因是什麼? 是為了方便提取其中的資料嗎? 一直用這玩意,但是一直有疑惑, 與其找到指標為了什麼存在, 或是指標的概念是為什麼建立的, 比較想知道指標最常應用的地方..。 到現在不是很會應用操弄這個機制...。 不知道怎麼表達切確的疑問,不明之處還望指教! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.224.71.13

10/26 12:44, , 1F
如果存的是英文 char *s = "abcde"; 的話,你理解嗎?
10/26 12:44, 1F

10/26 12:44, , 2F
char是1BYTE,只是一個單位不一定只能放文字
10/26 12:44, 2F

10/26 12:44, , 3F
>文字怎麼能夠做指標? 你需要去翻書學習指標了
10/26 12:44, 3F

10/26 12:48, , 4F
為什麼int* = char*的時候,總是不能?
10/26 12:48, 4F

10/26 12:49, , 5F
可以開WinHex看記憶體長什麼樣子
10/26 12:49, 5F

10/26 12:51, , 6F
我只能說, 這是語言的規則, 限制了一些型態的操作把可
10/26 12:51, 6F

10/26 12:51, , 7F
你沒做轉型啊
10/26 12:51, 7F

10/26 12:52, , 8F
寫性降低來換到更高的安全性, 在 C 裡不同型態有他的
10/26 12:52, 8F

10/26 12:53, , 9F
限定操作方法, 你用這個語言就要按照規定來
10/26 12:53, 9F
也就是說,int*和char*是一樣的,只是規則限制它們必須是不一樣的。對嗎? int我還能理解,可是char就不太能理解了...。 ※ 編輯: mabus 來自: 125.224.71.13 (10/26 13:03)

10/26 12:57, , 10F
abc還是數字是看程式如何解讀,不然一樣都是1跟0的組合
10/26 12:57, 10F

10/26 13:02, , 11F
文字就用ASCII阿
10/26 13:02, 11F
那int *s = "abcde";是不允許的,是因為已經分成int和char兩種規則了,對嗎? 但是它們是一樣的東西,對嗎? ※ 編輯: mabus 來自: 125.224.71.13 (10/26 13:07)

10/26 13:04, , 12F
就跟前面幾篇的情況一樣, 編譯器把你 "..." 裡的東西
10/26 13:04, 12F

10/26 13:05, , 13F
存在某塊記憶體裡, 再讓你的指標指到那裡去
10/26 13:05, 13F

10/26 13:13, , 14F
int *s = (int *)"abcde"; //OK
10/26 13:13, 14F

10/26 13:13, , 15F
你要先知道 "abcde" 到底是什麼
10/26 13:13, 15F

10/26 13:14, , 16F
你要用int*來解釋"abcde"的話,就會變成0x44434241
10/26 13:14, 16F

10/26 13:48, , 17F
一二三四五六七八 <= 這只是字型檔教程式怎麼把它們畫出來
10/26 13:48, 17F

10/26 13:49, , 18F
並不是存一個 "一" 在記憶體裡
10/26 13:49, 18F
文章代碼(AID): #1CnbfC5p (C_and_CPP)
文章代碼(AID): #1CnbfC5p (C_and_CPP)