title

  • 1. go中的指针
  • 2. 函数中的指针
  • 3. 方法中的指针

1. go中的指针

使用 *类型 声明指针…
使用*变量名获取指针的值…
使用 &p 获取指针的内存地址…

 fmt.Println("======== 指针复习 ========")// 声明指针avar a *intb := 1// 获取到b的内存地址.. 指向ba = &bfmt.Println(a, &b, " 获取到指针变量的值 ", *a)

2. 函数中的指针

go 函数中的指针默认是值传递,即传递类型参数,是对当前类型的拷贝。而不是传递引用。如果传递参数指针,则改变原来参数的值。

package mainimport "fmt"type Vertex struct {X, Y float64
}func show1(v Vertex) {v.X = 9v.Y = 9
}func show(v *Vertex) {v.X = 9v.Y = 9
}func main() {v := Vertex{1, 2}show1(v)fmt.Println(v)show(&v)fmt.Println(v)
}

可以看到结果… 传递指针的改变了原来的值…

$ go run .
{1 2}
{9 9}

而对于go中函数,参数是什么类型,传递就是什么类型

func show(v *Vertex) {v.X = 9v.Y = 9
}// 错误
v := Vertex{1, 2}
show(v)// 正确
v := &Vertex{1, 2}
show(v)

3. 方法中的指针

go中的方法,有个方法接收者。这也是和函数的区别。某个结构体或者类型,可以给它们设置方法。

// 结构体的方法, (v *Vertex)为方法接收者
func (v *Vertex) changeOrg() {v.X, v.Y = 3.0, 3.0fmt.Println("in changeOrg ", *v)
}// (v Vertex)为方法接收者
func (v Vertex) nothingChange() {v.X, v.Y = 3.0, 3.0fmt.Println("copy one ", v)
}

方法的指针可以重定向.这里说会比较晦涩。即接收者是指针,可以用值类型调用。接收者是值类型,也可以用指针调用。

 v := Vertex{99, 99}// 接收者是指针, 方法能用值类型调用// 由于 changeOrg 方法有一个指针接收者,为方便起见,Go 会将语句 v.changeOrg() 解释为 (&v).changeOrg()。v.changeOrg()// (&v).changeOrg()

或者

 v := Vertex{1, 1}// 值调用v.nothingChange()fmt.Println(v)p := &v// 方法支持指针调用p.nothingChange()// (*p).m1()fmt.Println(v)

关于go指针在方法or函数中这件事相关推荐

  1. c语言使用指针在被调函数中改变主调函数的变量 地址运算符 间接运算符

    1.指针 用于存储变量的地址 指针是一个值为内存地址的变量. 2.&运算符(地址运算符) &后跟一个变量名,给出变量的地址 &a,表示变量a的地址 3.*运算符(间接运算符/解 ...

  2. pythonexecute函数功能_关于Python函数的5件事

    作者 | Aditya Kousik Cotra 译者 | IT外文选刊是时候编写结构合理的程序了. 函数是复用程序代码的有效方法.使用函数的好处是可以节省空间,而且我们选择的名称也使我们的程序易于阅 ...

  3. C语言在子函数中调用malloc申请内存的方法【转】

    (转自:https://blog.csdn.net/HuffieWang/article/details/51744043) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  4. 函数中结构体指针作为形参修改指针地址

    当函数的形参为结构体指针,但是在函数中不仅修改指针指向的值,而且修改指针指向的地址 以下可以改变主函数中a的值,但是a指向的地址不会发生改变 struct student {int aa;int bb ...

  5. 二级指针在子函数中申请内存的两种方式

    二级指针:在主函数中申明变量,在子函数中分配内存,有两种方式返回二级指针.在这个过程只有深刻理解了C的函数调用模型,以及指针的内存模型,才能够掌握好. #pragma once #include &l ...

  6. 从*p++说指针,数组,结构和函数

    说明文中*p++和*s++都是一个东西,不做字面上的统一了. 因为右结合性,*p++ 其实就是 *(p++) 1.strlen的实现 #include <stdio.h> main(){c ...

  7. 【Android 高性能音频】AAudio 音频流 PCM 采样 的 采样 缓冲 播放 的 连续机制 ( 数据回调机制 | 数据回调函数指针 | 实现数据回调函数 | 设置数据回调函数 )

    文章目录 I . AAudio 音频流 采样 缓冲 播放 的连续机制 II . AAudio 音频流 数据回调函数 函数指针类型定义 III . AAudio 音频流 数据回调函数 实现 IV . A ...

  8. c语言指针,return以及函数返回值

    指针作为c语言的精华所在所以会多学习几天来扎实的掌握 void* 这不叫空指针,这叫无确切类型指针.这个指针指向一块内存,却没有告诉程序该用何种方式来解释这片内存.所以这种类型的指针不能直接进行取内容 ...

  9. 指针的引用做函数的参数

    #include <iostream>using namespace std; // 二级指针的使用 [11/24/2017 Andrew]struct Teacher {char nam ...

最新文章

  1. C#正则表达式获取组名,按照组名输出匹配内容
  2. iOS 8 UITableView分隔符插入0不起作用
  3. python中面向对象的缺点_最简单的方法搞懂Python面向对象
  4. HDU2049(错列排序)
  5. - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
  6. 400集python入门到精通_2020年最强Python学习路线+教程,400集带你从入门到精通
  7. 甜甜的爱情+美食完美情人节海报,PSD分层模板轻松搞定设计,拿去用!
  8. Exchange Server 2007邮箱服务器失败规划和恢复
  9. php 5.5 sqlserver,thinkphp5 连接sqlserver windows
  10. 饥饿的时候我想起的小食
  11. Springboot属性文件application.properties配置大全,版本:1.5.4
  12. 关于前端的margin
  13. 计算机电路电子技术试题答案,数字电子技术试题库及答案解析知识分享
  14. 轻松搞懂Java中的自旋锁
  15. Mutect2​案例 / 有或没有正常样本配对的肿瘤体细胞变异检测结果对比
  16. isp邮件服务器是什么,与ISP企业邮箱共建邮件服务器
  17. Qt 语言家实现中英文切换(解决纯代码添加部件的中英文转换问题)
  18. 矩阵微分与向量函数Taylor展开
  19. 科技企业家的自恋行为启示录
  20. win10修复tcp驱动服务器,怎么解决tcpip.sys文件导致蓝屏|Win10的tcpip修复工具

热门文章

  1. Java面试题17 牛客 下面哪个选项正确创建socket连接?
  2. spring mvc学习(27):处理数据模型--从表单到controller传输数据续
  3. 玩转oracle 11g(38):rman备份-全库恢复
  4. 电感检测_三、电感线圈的识别与检测(二)
  5. android开机logo制作工具,Android 开机Logo制作
  6. vscode python环境_在vscode中配置python环境
  7. vueinput里只能输入数字_大佬们,vue里面 限制input只能输入数字怎么做啊?
  8. js原生实现点击事件只创建一个元素
  9. beego——模板处理
  10. 关于CaciiEZ端口流量阀值报警的设置