看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) 這個程式感覺有點小複雜 目前有兩個.h檔及一個.c檔,估且稱為 aaa.h、bbb.h bbb.c ,現在我在 aaa.h宣告一個const char *msg 而這個const char *msg 是在public中的struct Man內所宣告 而bbb.h及bbb.c皆有include aaa.h 而bbb.c同時include aaa.h 及 bbb.h 現在這個const char *msg在這三個檔案皆需被使用到 也分別在這三個檔案被宣告 Qustion 1:那這三個*msg 應該都指向不同的記憶體位址吧? Qustion 2:假設我希望這三個*msg皆指向同一個記憶體位址,是否能做到 Qustion 3:若我想把一個字元 'J'放入,寫法是否為 const char *msg = 'J';且 此寫法是放在bbb.c ? 希望得到的正確結果: 希望三個指標msg 皆指向同一記憶體位址,且能寫入 J 程式跑出來的錯誤結果: core~down~ Q_Q 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) gcc 有問題的code: (請善用置底文標色功能) 補充說明: -- 小米奇的相簿XD http://www.wretch.cc/album/album.php?id=cthd013116&book=3 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.68.164.54 ※ 編輯: Lattewang 來自: 203.68.164.54 (09/02 00:08)
loveme00835:附上模塊依賴圖 http://ppt.cc/-~x@ 還是要看code才 09/02 00:21
loveme00835:能知道你講的是什麼東西, 因為可能變成靜態區域變數 09/02 00:21
QQ29:const *msg只是說你這指標指到的位址 值不能被改耶 09/02 00:23
loveme00835:「是在public中的struct Man內所宣告」雖然我可以大概 09/02 00:23
QQ29:指到哪是你控制的吧 09/02 00:24
loveme00835:想像你的layout, 不過宣告跟定義是不同的東西 09/02 00:24
loveme00835:修正2樓 : internal linkage global variable 09/02 00:37
QQ29:l大不懂你推的那個英文啥意思...但確實可以更改指到哪吧? 09/02 01:01
QQ29:又不是 char *const msg.... 09/02 01:02
loveme00835:我不知道他是用 char const * 來算還是用 Man 來算, 09/02 01:04
loveme00835:同名物件還是三個不同物件, 因為原po說的「宣告」很可 09/02 01:05
loveme00835:能是多個宣告一份定義, 也可能是多個定義 09/02 01:05
QQ29:那l大可否請教你寫的那專有詞是什麼意思呀 想學一下 09/02 01:06
loveme00835:如果是同名的多份定義, 連結時一定衝到, 但是如果採 09/02 01:09
loveme00835:static 的方式定義, 那不同份的定義影響範圍只在該檔 09/02 01:09
QQ29:就是static修飾字再做的事叫做internal linkage? 09/02 01:10
loveme00835:, 彼此看不見對方的那份, 這是具有internal linkage 09/02 01:10
loveme00835:的變數 09/02 01:10
loveme00835:對全域的變數來講, 是有這種效果, 函式內的不同 09/02 01:11
loveme00835:推了那麼多還是沒看到code = __ = 09/02 01:12
QQ29:嗯嗯 http://tinyurl.com/24m8gcm 請教一下為啥他說C是 09/02 01:12
QQ29:external linkage阿? 還有分喔~~ 09/02 01:12
QQ29:因為我之前有發一篇問說 const寫在.h 給大家include不會re 09/02 01:13
QQ29:define..難道是c++才會降? c 會redefine? 09/02 01:13
loveme00835:想像不同使用者都引入 test_const.h 這個標頭檔, 分開 09/02 01:21
loveme00835:編譯, 編譯器勢必要想辦法配置字串的空間再讓指標指向 09/02 01:22
loveme00835:那塊空間的起始位置, 不過再把多個目的檔連結起來就產 09/02 01:23
loveme00835:生問題了, 因為這麼多的"Testing"字串, 讓他不曉得應 09/02 01:25
loveme00835:該指向哪裡, 所以這裡比較好的方法就是讓他具有 09/02 01:27
hilorrk:回QQ29 const在純C是external linkage..這樣寫會redefine 09/02 01:27
loveme00835:internal linkage, 直接指向各自檔案內配置的空間 09/02 01:28
loveme00835:C 語言我不太清楚 0.0 但就你貼的網址來說, 重點在「 09/02 01:35
loveme00835:配置的空間何在」而不是「有沒有const」 09/02 01:36
hilorrk:不過C字串使用internal linkage也導致不能用作nontype 09/02 01:50
hilorrk:template param的arg...不知C++0x有沒有改進這點@@? 09/02 01:50
loveme00835:提案中看起來是沒有喔! > < 09/02 02:11
loveme00835:提供程式碼給Q大參考: http://ppt.cc/H8@8 include 就 09/02 02:23
loveme00835:是複製貼上的動作, 所以分開編譯的話實際上是有3份不 09/02 02:23
loveme00835:一樣的a, 所在的位址也不一樣 09/02 02:24