【问题标题】:Access values inside array using pointers使用指针访问数组内的值
【发布时间】:2021-12-04 18:18:16
【问题描述】:

我注意到在 golang 中我们可以使用指向数组的指针,如下所示:

arr := [3]int{1, 2, 3}
var ptr *[3]int = &arr

要获取存储在索引 n 处的值,我们可以使用 (*ptr)[n],但为什么 ptr[n] 也会获取值,它不应该输出一些随机地址吗?

上下文

在 C++ 中,这是观察到的行为


int (*ptr)[5];
int arr[] = {1,2,3,4,5};

ptr = &arr;
cout <<"ptr[1] = " << ptr[1] <<endl; //Outputs an address (base address of array + 20bytes)
cout << "(*ptr)[1] = " << (*ptr)[1]<< endl; //Outputs 2

【问题讨论】:

  • 在 C++ 中有array-to-pointer decay(从数组类型的值到指针类型的值的隐式转换),但在 Go 中没有相同的转换。
  • Go 故意省略了所有你可以用 C 和 C++ 中的指针对自己做的可怕事情。结果是您不会意外地射中自己的脚(C),或者意外地创建自己的许多实例并射中所有的脚(C++)。另请参阅www-users.cs.york.ac.uk/susan/joke/foot.htm

标签: arrays go pointers


【解决方案1】:

对于 pointera 到数组 类型:

  • a[x](*a)[x] 的简写

查看语言规范:Index Expressions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多