栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

第003节:指针的操作

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第003节:指针的操作

1.1 获取指针的值

获取一个指针意味着访问指针指向的变量的值。语法是:*a

示例代码:

package main  import (      "fmt")func main() {      b := 255    a := &b    fmt.Println("address of b is", a)    fmt.Println("value of b is", *a)}

1.2 操作指针改变变量的数值

示例代码:

package mainimport (      "fmt")func main() {      b := 255    a := &b    fmt.Println("address of b is", a)    fmt.Println("value of b is", *a)    *a++    fmt.Println("new value of b is", b)}

运行结果

address of b is 0x1040a124  value of b is 255  new value of b is 256  

1.3 使用指针传递函数的参数

示例代码

package mainimport (      "fmt")func change(val *int) {      *val = 55}func main() {      a := 58    fmt.Println("value of a before function call is",a)    b := &a    change(b)    fmt.Println("value of a after function call is", a)}

运行结果

value of a before function call is 58  value of a after function call is 55  

不要将一个指向数组的指针传递给函数。使用切片。

假设我们想对函数内的数组进行一些修改,并且对调用者可以看到函数内的数组所做的更改。一种方法是将一个指向数组的指针传递给函数。

package mainimport (      "fmt")func modify(arr *[3]int) {      (*arr)[0] = 90}func main() {      a := [3]int{89, 90, 91}    modify(&a)    fmt.Println(a)}

运行结果

[90 90 91]

示例代码:

package mainimport (      "fmt")func modify(arr *[3]int) {      arr[0] = 90}func main() {      a := [3]int{89, 90, 91}    modify(&a)    fmt.Println(a)}

运行结果

[90 90 91]

虽然将指针传递给一个数组作为函数的参数并对其进行修改,但这并不是实现这一目标的惯用方法。我们有切片。

示例代码:

package mainimport (      "fmt")func modify(sls []int) {      sls[0] = 90}func main() {      a := [3]int{89, 90, 91}    modify(a[:])    fmt.Println(a)}

运行结果:

[90 90 91]

Go不支持指针算法。

package main

func main() {
b := […]int{109, 110, 111}
p := &b
p++
}

nvalid operation: p++ (non-numeric type *[3]int)

指针数组

package mainimport "fmt"const MAX int = 3func main() {   a := []int{10,100,200}   var i int   for i = 0; i < MAX; i++ {      fmt.Printf("a[%d] = %dn", i, a[i] )   }}

结果

a[0] = 10a[1] = 100a[2] = 200

有一种情况,我们可能需要保存数组,这样我们就需要使用到指针。

package mainimport "fmt"const MAX int = 3func main() {   a := []int{10,100,200}   var i int   var ptr [MAX]*int;   for  i = 0; i < MAX; i++ {      ptr[i] = &a[i]    }   for  i = 0; i < MAX; i++ {      fmt.Printf("a[%d] = %dn", i,*ptr[i] )   }}

结果

a[0] = 10a[1] = 100a[2] = 200
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/793639.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号