编译原理:引用的实质是不是就是指针?

g
gooog
楼主 (北美华人网)
尽管书上说引用不同于指针。
假设你来写一个语言,你给你的语言两种变量调用:1)引用 2) 指针。 你在设计的时候,是不是,这个引用按照指针来设计? 只是给用户使用的时候,不同。
也就是说,引用的内在模式和原理,其实就是 地址不变的指针。 而普通的指针,则是地址可变的指针。
下面的问题是关于python的类作为参数传递给一个函数。 假设 Person person1 foo(person1) { person1.name = "Zhang San" }
foo(person1) print(person1.name)
请问这个person1是全局的类变量吗? 为什么在传递给foo(),在函数里面改变的person1.name, 在函数结束后,仍然保持改变的值呢? name = "Zhang Si" foo(name){ name = "Li Bin" } foo(name) print(name) 上面这个输出的结果是“Zhang Si”,函数内部的改变name的值,并没有影响到函数外。

公用马甲5

干了十几年的计算机,现在也没搞明白啥中文里的指针、函数传递啥的, 当年学的时候就觉得这种中文叫法不妥
t
thbzico666

干了十几年的计算机,现在也没搞明白啥中文里的指针、函数传递啥的, 当年学的时候就觉得这种中文叫法不妥
公用马甲5 发表于 2023-12-04 14:34

半路出家的?学过操作系统和微机原理不就了解机器码怎么load执行的了,再回头看这些概念不要太简单
公用马甲5
回复 3楼thbzico666的帖子

你说的这些都学过,但是学的时候就不是中文
g
gooog

干了十几年的计算机,现在也没搞明白啥中文里的指针、函数传递啥的, 当年学的时候就觉得这种中文叫法不妥
公用马甲5 发表于 2023-12-04 14:34

请大侠给我们用英文讲讲reference和pointer是不是其实没有区别。所谓的区别,只是厂家的定义不同。厂家指的是编译语言设计单位。
比如c++的编译器,python的编译器。
另外,python没有指针。但是有引用。python的引用其实就是指针。这句话,对吗?
u
usayso
指针已死,有事烧纸
h
hhmouse
半路出家的?学过操作系统和微机原理不就了解机器码怎么load执行的了,再回头看这些概念不要太简单
thbzico666 发表于 2023-12-04 14:36

他的意思是,这些词翻译成中文之后真难读懂。
g
gooog
指针已死,有事烧纸
usayso 发表于 2023-12-04 14:43

如果指针死了。那么类的调用,用的是什么?
比如: Person person1 foo(Person x) { return x }
g
gokgs
是的,引用的实质就是指针,或者说是通过指针来实现的。 Java 号称没有指针,null pointer exception 不要太多,哈哈。
所以,大部分都是垃圾语言。 C C卄才应该好好推广。
g
gokgs
指针已死,有事烧纸
usayso 发表于 2023-12-04 14:43

门外汉,句号。
g
gokgs
请大侠给我们用英文讲讲reference和pointer是不是其实没有区别。所谓的区别,只是厂家的定义不同。厂家指的是编译语言设计单位。
比如c++的编译器,python的编译器。
另外,python没有指针。但是有引用。python的引用其实就是指针。这句话,对吗?
gooog 发表于 2023-12-04 14:42

本质上没区别,语义上还是有本质区别的,两个概念。
计算机本质上就是二进制,但演生出好多概念。
w
wmn
20年没写过code的了 在C加加里 当你call foo(person1),compiler 的操作是 foo(Person(person1)), 所以 函数吃进的是另一个instance 的Person, 而不是person1
一年明月
引用是披了一层皮的指针。按这样理解就够了 😅
扶苏
The difference between pass-by-reference and pass-by-pointer is that pointers can be NULL or reassigned whereas references cannot. Use pass-by-pointer if NULL is a valid parameter value or if you want to reassign the pointer. Otherwise, use constant or non-constant references to pass arguments.
u
usayso
门外汉,句号。
gokgs 发表于 2023-12-04 14:49

门不门外,看看全球有几个靠c吃饭的
z
zak17
回复 15楼usayso的帖子
我靠它吃饭。
公用马甲38
问这种问题,首先你得说什么语言,不同语言都不一样,然后还得说版本
z
zak17
无论是reference还是pointer, 都是地址。CS的不清楚没啥,CE的不清楚不该。
h
huaren_2018
primitive type吧