关于go指针在方法or函数中这件事
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函数中这件事相关推荐
- c语言使用指针在被调函数中改变主调函数的变量 地址运算符 间接运算符
1.指针 用于存储变量的地址 指针是一个值为内存地址的变量. 2.&运算符(地址运算符) &后跟一个变量名,给出变量的地址 &a,表示变量a的地址 3.*运算符(间接运算符/解 ...
- pythonexecute函数功能_关于Python函数的5件事
作者 | Aditya Kousik Cotra 译者 | IT外文选刊是时候编写结构合理的程序了. 函数是复用程序代码的有效方法.使用函数的好处是可以节省空间,而且我们选择的名称也使我们的程序易于阅 ...
- C语言在子函数中调用malloc申请内存的方法【转】
(转自:https://blog.csdn.net/HuffieWang/article/details/51744043) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- 函数中结构体指针作为形参修改指针地址
当函数的形参为结构体指针,但是在函数中不仅修改指针指向的值,而且修改指针指向的地址 以下可以改变主函数中a的值,但是a指向的地址不会发生改变 struct student {int aa;int bb ...
- 二级指针在子函数中申请内存的两种方式
二级指针:在主函数中申明变量,在子函数中分配内存,有两种方式返回二级指针.在这个过程只有深刻理解了C的函数调用模型,以及指针的内存模型,才能够掌握好. #pragma once #include &l ...
- 从*p++说指针,数组,结构和函数
说明文中*p++和*s++都是一个东西,不做字面上的统一了. 因为右结合性,*p++ 其实就是 *(p++) 1.strlen的实现 #include <stdio.h> main(){c ...
- 【Android 高性能音频】AAudio 音频流 PCM 采样 的 采样 缓冲 播放 的 连续机制 ( 数据回调机制 | 数据回调函数指针 | 实现数据回调函数 | 设置数据回调函数 )
文章目录 I . AAudio 音频流 采样 缓冲 播放 的连续机制 II . AAudio 音频流 数据回调函数 函数指针类型定义 III . AAudio 音频流 数据回调函数 实现 IV . A ...
- c语言指针,return以及函数返回值
指针作为c语言的精华所在所以会多学习几天来扎实的掌握 void* 这不叫空指针,这叫无确切类型指针.这个指针指向一块内存,却没有告诉程序该用何种方式来解释这片内存.所以这种类型的指针不能直接进行取内容 ...
- 指针的引用做函数的参数
#include <iostream>using namespace std; // 二级指针的使用 [11/24/2017 Andrew]struct Teacher {char nam ...
最新文章
- C#正则表达式获取组名,按照组名输出匹配内容
- iOS 8 UITableView分隔符插入0不起作用
- python中面向对象的缺点_最简单的方法搞懂Python面向对象
- HDU2049(错列排序)
- - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
- 400集python入门到精通_2020年最强Python学习路线+教程,400集带你从入门到精通
- 甜甜的爱情+美食完美情人节海报,PSD分层模板轻松搞定设计,拿去用!
- Exchange Server 2007邮箱服务器失败规划和恢复
- php 5.5 sqlserver,thinkphp5 连接sqlserver windows
- 饥饿的时候我想起的小食
- Springboot属性文件application.properties配置大全,版本:1.5.4
- 关于前端的margin
- 计算机电路电子技术试题答案,数字电子技术试题库及答案解析知识分享
- 轻松搞懂Java中的自旋锁
- Mutect2​案例 / 有或没有正常样本配对的肿瘤体细胞变异检测结果对比
- isp邮件服务器是什么,与ISP企业邮箱共建邮件服务器
- Qt 语言家实现中英文切换(解决纯代码添加部件的中英文转换问题)
- 矩阵微分与向量函数Taylor展开
- 科技企业家的自恋行为启示录
- win10修复tcp驱动服务器,怎么解决tcpip.sys文件导致蓝屏|Win10的tcpip修复工具
热门文章
- Java面试题17 牛客 下面哪个选项正确创建socket连接?
- spring mvc学习(27):处理数据模型--从表单到controller传输数据续
- 玩转oracle 11g(38):rman备份-全库恢复
- 电感检测_三、电感线圈的识别与检测(二)
- android开机logo制作工具,Android 开机Logo制作
- vscode python环境_在vscode中配置python环境
- vueinput里只能输入数字_大佬们,vue里面 限制input只能输入数字怎么做啊?
- js原生实现点击事件只创建一个元素
- beego——模板处理
- 关于CaciiEZ端口流量阀值报警的设置