首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与其他语言相比,Ruby和指针?

与其他语言相比,Ruby和指针?
EN

Stack Overflow用户
提问于 2019-08-30 13:43:58
回答 3查看 913关注 0票数 3

我对ruby相当陌生,但来自C/C++背景,我相信我对计算机和编程的工作原理有基本的了解。

在C++中,如果您想要创建指向某个值的指针,您将将其指定为指针:http://www.cplusplus.com/doc/tutorial/pointers/

示例:

代码语言:javascript
运行
复制
int x = 3;
int *p = &x;
*p = 4;
std::cout << x;

这对我来说很有意义,因为现在p指向x的地址,因此当我们改变p的值时,x也会改变。在本例中,x将输出4。

但当我跑的时候

代码语言:javascript
运行
复制
a = []
b = a
a[0] = 3
p b
# => [3]

c = "this is a string"
d = c
c.upcase!
c = "the string has been edited"
p d
# => THIS IS A STRING

在ruby中,b输出[3],而对于我来说,它不应该输出任何内容。d输出的是"THIS IS A STRING",而不是"the string has been edited"Ruby and pointers是另一个问题,它们是如何在ruby中使用指针的。

,我的问题是:,为什么在ruby中数组被看作是指针,它是如何工作的?b是否像在C++中那样指向a的地址?是什么使变量改变了它所指向的地址?例如:如果a = b何时将a != b?为什么整数不指向另一个变量的地址?

EN

Stack Overflow用户

回答已采纳

发布于 2019-08-30 13:48:39

通常- ruby变量保存引用,而不是指向值的指针。当你分配:

代码语言:javascript
运行
复制
a = [3]
b = a

b引用与a相同的数组。字符串也是一样的。

值得一读:https://robertheaton.com/2014/07/22/is-ruby-pass-by-reference-or-pass-by-value/

编辑:

代码语言:javascript
运行
复制
a = [1]
b = a
b
# => [1]
a = [2]
a
# => [2]
b
# => [1]
票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57727934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档