Re: [問卦] 指標是不是只有C語言才有的玩死人的把

作者: bluebluelan (新陰流大目錄免許皆傳)   2022-06-04 12:17:31
你要知道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要那麼重指標 然後還要
: 運用得那麼複雜呢?
: 是不是用來整人的玩意 有沒有掛
:

Links booklink

Contact Us: admin [ a t ] ucptt.com