更新时间:2023-12-23 21:03
*的作用是引用指针指向的变量值,引用其实就是引用该变量的地址,“解”就是把该地址对应的东西解开,解出来,就像打开一个包裹一样,那就是该变量的值了,所以称为“解引用”。也就是说,解引用是返回内存地址中对应的对象。
对于c语言中指针的操作符有两个:&和*。对于&,好理解,翻译的也不错,就是“取地址”的意思。但对于*,翻译为“解引用”,字面意思不好理解,即使看了后面内容才知道不过是“取指针指向的地址的内容”,也仍然是觉得怪怪的,“解引用”这个词难记也难于从字面直接判断意思,以致时间长了还是感觉像见了熟悉的陌生人。
翻了好多资料,以及各种网上解释,大约有点意思了。依我的理解,约摸是这样:
“引用”这个词,出现最多的场景就是:在文章或者注脚里,写上“引用(或摘自)某某作者某篇文章”,意思很明了,就是出现在本文的不是作者自己的话,而是别个作者的话,于是“引用”的意思就是拿过来用。(以下提到”场景“,就是指的这个例子)
国外资料出现的一词“reference”,应译为”参考,参照“,在我们中文技术资料上翻译为了”引用“,照上面说的那种场景,倒也可以理解的通。而”dereference“翻译为”解除参照“,资料上翻译为”解引用“,如果回到上面那种场景,那”解引用“或者”解除参照“就是:我们拿了(引用)别个作者的话,却没有注解(解除参照)说这是别人的话,实际上我认为”去引用化“也许更能表达这个过程或者这个意思。那么对应到C语言中,指针变量是存储”其它变量“的地址的,当我们用”*“去操作指针时,我们的意思就是把那个”其它变量“的内容拿过来放在这里,却不说明这是别人(在这里就是指针存储的变量)的东西,当然这只是类比。过程差不多相似,只要能帮助理解,就ok了。于是”解引用“这样来理解,貌似好多了。不知道大家懂我说的了没?
网上查的”dereference“在技术资料上翻译真是各种多阿,这里不说了,反正其它翻译也许更难理解。
翻译别国资料,用词真是难,毕竟两种语言词汇不一定完完全全的相对应。尤其技术资料,还要讲究专业术语,翻译成中文时,那是真的千挑万选,才搞出一个像”专业术语“的词汇来表达。现在国内作者翻译水平参差不齐,加上对术语的创造,使得翻译后的中文资料难于阅读啊。比如上面的”解引用“就是一例。再说个”正则表达式“,从字面意思来看,完全不懂,或许看英文都比我们自己的中文好理解一点。但是纯英文看的累,还慢,真是两难啊。
还可以把“解引用”理解为“解码”。假设ptr里存放的是一个内存地址,那么*ptr就是这个内存地址里存放的数据。前面这个“*”的解引用操作,就可以理解为对这个ptr进行解码,解码得到的数据就是*ptr,也就是我们常说的“这个内存地址里存放的数据”或者“这个指针指向的数据”。“指针”的理解模式太容易混淆,而“解码”的理解模式更好记一点。