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