C 为什么可以';t指针值是否是引用内存空间中对象的良好标签?
比如说,C 为什么可以';t指针值是否是引用内存空间中对象的良好标签?,c,pointers,lvalue,C,Pointers,Lvalue,比如说, int x = 10; 我们知道标识符x的作用类似于一个标签,它引用存储值10的对象。但是为什么&x不能被称为引用同一对象的标签呢&x是存储值10的整个int对象的地址值。所以我认为标识符x和&x在充当对象标签方面没有区别。因此,我认为这是一个很好的理由,可以说&x是一个左值。因为根据ISO C116.3.2.1,它说 左值是一个可能指定对象的表达式 但是为什么指针值&x不是左值 因为&x不是标签,所以它是指向标签值的指针 为了帮助您理解这一点的重要性,我将对不同类型的引用进行解释:
int x = 10;
我们知道标识符x
的作用类似于一个标签,它引用存储值10
的对象。但是为什么&x
不能被称为引用同一对象的标签呢&x
是存储值10
的整个int
对象的地址值。所以我认为标识符x
和&x
在充当对象标签方面没有区别。因此,我认为这是一个很好的理由,可以说&x
是一个左值。因为根据ISO C116.3.2.1,它说
左值是一个可能指定对象的表达式
但是为什么指针值&x
不是左值 因为&x不是标签,所以它是指向标签值的指针
为了帮助您理解这一点的重要性,我将对不同类型的引用进行解释:
标签-也称为“别名”或“名称”,它们标识一些值或对象。在动态类型语言中,它们标识的值或对象可以更改;而在静态类型语言中,它保持不变。C中标签类型引用的一个例子是intx代码>
指针-指针标识某个值或对象的地址。这对于实现别名(对同一对象有多个引用)非常有用。C中指针类型引用的一个例子是int*x代码>或&x
句柄-句柄是某个值或对象的唯一标识符(通常为整数)。像指针一样,它们允许使用别名;但是句柄不能像指针一样被取消引用。这非常有用,因为它可以用来隐藏数据结构的底层实现,并允许内存管理器安全地重新安排内存(例如碎片整理),以提高缓存一致性并提高性能。C中句柄类型引用的一个例子是POSIXopen
函数返回的int
值
离题:在Golang中,当您尝试分配给指针类型对象的成员时,它会自动取消引用;因此不需要->
操作符。对于vec2*v
,v.x
将被解释为v[0].x
,因为这是语言的设计方式。你的地址不是你自己。@KarolyHorvath,但我想同样的逻辑也适用于x
我不认为&x
指定对象,但我必须查找“对象”的确切定义@Jin:再来一次-你可以给x
赋值。不能将新值分配给&x
。这就是区别。表达式&x
不指定内存中的对象-它指定内存中对象的地址,您不能修改地址&x
可能不是作业的目标,因此它不能是左值。哇,感谢您对不同类型的参考文献进行解释!