关于指针的问题

来源:3-1 数组

qq_四月是你的谎言喽_03448132

2019-05-16

func test(arr *[5]int) {
arr[0] = 100
}
老师,感觉这个地方不应该是 *arr[0] = 100吗, 因为 arr 是指针类型, *arr[0] 才是数组中的值

写回答

1回答

ccmouse

2019-05-19

c语言的指针是这样。但是go语言的指针加不加*,主要在申明时有区别。在使用这个变量的时候,很多情况都可以通用。这个我们不用死记,我有一个技巧。使用指针变量的时候先尝试不加*,如果编译通过了就ok,不然再加上。

1
2
ccmouse
回复
折翼舞断天涯
函数的参数都是值传递。函数里面的a b和调用它时候的a b不是同一个变量,是一份拷贝。在函数里面,a b的值确交换了,但是外面并没有。可以在swap函数中打印a b,来确认在swap里面的确是换了。 我这里写了一个例子:https://play.studygolang.com/p/DIGrEDKqQ_Z swap1是错误的,交换的结果没有体现出去。 swap2是正确的,a, b其实并没有交换,它们是地址,交换的是a,b所指向的内存的值。虽然a, b是外面调用时候的&v1, &v2的拷贝,但a和&v1, b和&v2都分别指向同一内存地址,就是分别为v1, v2的地址。
2020-06-29
共2条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程