c++ - Ruby 和指针与其他语言相比?

标签 c++ arrays ruby

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

在 C++ 中,如果你想创建一个指向一个值的指针,你将把它指定为一个指针: http://www.cplusplus.com/doc/tutorial/pointers/

例子:

int x = 3;
int *p = &x;
*p = 4;
std::cout << x;

这对我来说很有意义,因为现在 P 指向 X 的地址,因此当我们改变 P 的值时,X 也会改变。在这种情况下,X 将输出 4。

但是当我运行时:
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 ?为什么整数不指向另一个变量的地址?

最佳答案

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

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

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

编辑:
a = [1]
b = a
b
# => [1]
a = [2]
a
# => [2]
b
# => [1]

关于c++ - Ruby 和指针与其他语言相比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57727934/

相关文章:

c++ - 为什么占用临时地址是非法的?

c++ - 如果通过new创建对象,成员函数的局部变量在哪里创建?

java - 解析没有名称的json数组

c++ - 是使用T const&还是T&&

c++ - 将HTML5 Canvas 数据(rgba)发送到asm.js。 C++/JavaScript中的数组类型

java - Java中的byte[]到String : What does the output mean?

javascript - 如何从 JavaScript 数组中删除重复的对象?

ruby-on-rails - Ruby 遍历日期

数组的 Ruby 散列输出 {}

ruby-on-rails - 无法运行新应用程序