[問題] 指標問題

看板C_and_CPP (C/C++)作者 (拿鐵)時間13年前 (2010/09/02 00:08), 編輯推噓5(5034)
留言39則, 3人參與, 最新討論串7/13 (看更多)
遇到的問題: (題意請描述清楚) 這個程式感覺有點小複雜 目前有兩個.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)

09/02 00:21, , 1F
附上模塊依賴圖 http://ppt.cc/-~x@ 還是要看code才
09/02 00:21, 1F

09/02 00:21, , 2F
能知道你講的是什麼東西, 因為可能變成靜態區域變數
09/02 00:21, 2F

09/02 00:23, , 3F
const *msg只是說你這指標指到的位址 值不能被改耶
09/02 00:23, 3F

09/02 00:23, , 4F
「是在public中的struct Man內所宣告」雖然我可以大概
09/02 00:23, 4F

09/02 00:24, , 5F
指到哪是你控制的吧
09/02 00:24, 5F

09/02 00:24, , 6F
想像你的layout, 不過宣告跟定義是不同的東西
09/02 00:24, 6F

09/02 00:37, , 7F
修正2樓 : internal linkage global variable
09/02 00:37, 7F

09/02 01:01, , 8F
l大不懂你推的那個英文啥意思...但確實可以更改指到哪吧?
09/02 01:01, 8F

09/02 01:02, , 9F
又不是 char *const msg....
09/02 01:02, 9F

09/02 01:04, , 10F
我不知道他是用 char const * 來算還是用 Man 來算,
09/02 01:04, 10F

09/02 01:05, , 11F
同名物件還是三個不同物件, 因為原po說的「宣告」很可
09/02 01:05, 11F

09/02 01:05, , 12F
能是多個宣告一份定義, 也可能是多個定義
09/02 01:05, 12F

09/02 01:06, , 13F
那l大可否請教你寫的那專有詞是什麼意思呀 想學一下
09/02 01:06, 13F

09/02 01:09, , 14F
如果是同名的多份定義, 連結時一定衝到, 但是如果採
09/02 01:09, 14F

09/02 01:09, , 15F
static 的方式定義, 那不同份的定義影響範圍只在該檔
09/02 01:09, 15F

09/02 01:10, , 16F
就是static修飾字再做的事叫做internal linkage?
09/02 01:10, 16F

09/02 01:10, , 17F
, 彼此看不見對方的那份, 這是具有internal linkage
09/02 01:10, 17F

09/02 01:10, , 18F
的變數
09/02 01:10, 18F

09/02 01:11, , 19F
對全域的變數來講, 是有這種效果, 函式內的不同
09/02 01:11, 19F

09/02 01:12, , 20F
推了那麼多還是沒看到code = __ =
09/02 01:12, 20F

09/02 01:12, , 21F
嗯嗯 http://tinyurl.com/24m8gcm 請教一下為啥他說C是
09/02 01:12, 21F

09/02 01:12, , 22F
external linkage阿? 還有分喔~~
09/02 01:12, 22F

09/02 01:13, , 23F
因為我之前有發一篇問說 const寫在.h 給大家include不會re
09/02 01:13, 23F

09/02 01:13, , 24F
define..難道是c++才會降? c 會redefine?
09/02 01:13, 24F

09/02 01:21, , 25F
想像不同使用者都引入 test_const.h 這個標頭檔, 分開
09/02 01:21, 25F

09/02 01:22, , 26F
編譯, 編譯器勢必要想辦法配置字串的空間再讓指標指向
09/02 01:22, 26F

09/02 01:23, , 27F
那塊空間的起始位置, 不過再把多個目的檔連結起來就產
09/02 01:23, 27F

09/02 01:25, , 28F
生問題了, 因為這麼多的"Testing"字串, 讓他不曉得應
09/02 01:25, 28F

09/02 01:27, , 29F
該指向哪裡, 所以這裡比較好的方法就是讓他具有
09/02 01:27, 29F

09/02 01:27, , 30F
回QQ29 const在純C是external linkage..這樣寫會redefine
09/02 01:27, 30F

09/02 01:28, , 31F
internal linkage, 直接指向各自檔案內配置的空間
09/02 01:28, 31F

09/02 01:35, , 32F
C 語言我不太清楚 0.0 但就你貼的網址來說, 重點在「
09/02 01:35, 32F

09/02 01:36, , 33F
配置的空間何在」而不是「有沒有const」
09/02 01:36, 33F

09/02 01:50, , 34F
不過C字串使用internal linkage也導致不能用作nontype
09/02 01:50, 34F

09/02 01:50, , 35F
template param的arg...不知C++0x有沒有改進這點@@?
09/02 01:50, 35F

09/02 02:11, , 36F
提案中看起來是沒有喔! > <
09/02 02:11, 36F

09/02 02:23, , 37F
提供程式碼給Q大參考: http://ppt.cc/H8@8 include 就
09/02 02:23, 37F

09/02 02:23, , 38F
是複製貼上的動作, 所以分開編譯的話實際上是有3份不
09/02 02:23, 38F

09/02 02:24, , 39F
一樣的a, 所在的位址也不一樣
09/02 02:24, 39F
文章代碼(AID): #1CVdfak2 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1CVdfak2 (C_and_CPP)