Re: [問卦] 指標是不是只有C語言才有的玩死人的把已回收
你要知道C的出現是在那種記憶體還是用幾KB幾KB算的年代
每一點記憶體都很珍貴 每一個CPU時脈都很珍貴
所以出現了指標這種東西允許我們直接改記憶體裡頭的值
一直到現代的作業系統內核基本上都還是C的天下
原因無他 就是快 指標指哪改哪 對於習慣用C的人 腦海裡頭都是指標
假設我們有一塊記憶體裡頭存著五樓的老二尺寸
你直接看記憶體位置
0x1000: 0x1E
0x1001: 0x5
發現不知道這是什麼意思 就只是一個非零值而已
但是我們可以用一個數據結構的指標直接去解讀
struct dick_spec {
uint8_t length;
uint8_t diameter;
};
struct dick_spec *big_dick = 0x1000;
big_dick->length 這個時候就是0x1000 裡頭的 0x1E 也就是十進制的30
代表五樓老二的長度 是 30cm
big_dick->diameter 也就是0x1001的值 0x5 也就是直徑 5cm
指標就是那麼方便 我們把五樓老二的尺寸放在記憶體位址0x1000
用一個數據結構的指標讀出來 就可以馬上拿到30cm 5cm這兩個數字
還只要2bytes
同時你還能有一個 struct dick_spec *small_dick = 0x1000;
想要竄改五樓老二的尺寸
small_dick->length = 0x3;
small_dick->diamter = 0x1;
五樓的老二尺寸就變成三公分 直徑一公分這種袖珍尺寸
那0x1000的值就是0x3 0x1001 就是 0x1了
如果你是用其他語言 勢必要花更大的記憶體空間
即使只是C++宣告一個Class裡頭只有length 跟 diameter各一個byte
外頭的C++包裝可能多了幾個數量級不只
業界真的在用 最多就是雙重指針 ** 再往上的操作都可以簡化到雙重指針
C的本質就是記憶體操作 C++雖然也能做 但是他是被設計拿來當OO用的
要記憶體操作 還是用C就好
※ 引述《iLeyaSin365 (365)》之銘言:
: 指標
: * 取值
: & 取址
: 兩個基本的簡單符號
: 然後人們就自己衍生出什麼指標陣列、
: 陣列指標、指標的指標.....
: 指來指去,搞死自己。
: 結果好像除了C語言家族(包含golang Rust)
: 其他語言也沒什麼在那裡瘋狂用指標這種東西
: 所以沒有指標其實也可以
: 那麼為何C要那麼重指標 然後還要
: 運用得那麼複雜呢?
: 是不是用來整人的玩意 有沒有掛
:
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.207.8.217 (美國)
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1654316253.A.615.html
→
06/04 12:20,
3年前
, 1F
06/04 12:20, 1F
→
06/04 12:20,
3年前
, 2F
06/04 12:20, 2F
推
06/04 12:20,
3年前
, 3F
06/04 12:20, 3F
推
06/04 12:21,
3年前
, 4F
06/04 12:21, 4F
推
06/04 12:24,
3年前
, 5F
06/04 12:24, 5F
→
06/04 12:25,
3年前
, 6F
06/04 12:25, 6F
是只能這樣用 指標只能用-> 結構只能用. 寫出*struct.val這種東西你要先思考
為啥非得這樣寫不可 你都有struct這個指標了 何必再來個*struct.val這種東西
直接用->就好了 雖然對編譯器而言都一樣 但對看code的人類就像是有屎沒拉出來一樣
struct dick_spec ur_dick;
struct dick_spec *dick_ptr = &ur_dick;
ur_dick.length; //Good
dick_ptr->length; //Good
ur_dick->length; // Compile Error
dick_ptr.length; // Compile Error
※ 編輯: bluebluelan (98.207.8.217 美國), 06/04/2022 12:29:03
→
06/04 12:29,
3年前
, 7F
06/04 12:29, 7F
※ 編輯: bluebluelan (98.207.8.217 美國), 06/04/2022 12:32:59
→
06/04 12:30,
3年前
, 8F
06/04 12:30, 8F
推
06/04 12:31,
3年前
, 9F
06/04 12:31, 9F
→
06/04 12:38,
3年前
, 10F
06/04 12:38, 10F
→
06/04 12:38,
3年前
, 11F
06/04 12:38, 11F
→
06/04 12:39,
3年前
, 12F
06/04 12:39, 12F
推
06/04 12:46,
3年前
, 13F
06/04 12:46, 13F
推
06/04 13:01,
3年前
, 14F
06/04 13:01, 14F
https://elixir.bootlin.com/linux/latest/source/include/linux/list.h#L843
怎麼了嗎
※ 編輯: bluebluelan (98.207.8.217 美國), 06/04/2022 13:35:18
推
06/04 13:41,
3年前
, 15F
06/04 13:41, 15F
→
06/04 13:41,
3年前
, 16F
06/04 13:41, 16F
推
06/04 21:40,
3年前
, 17F
06/04 21:40, 17F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):