golang 指针
- 一个指针变量指向了一个值的内存地址,类似于变量和常量,在使用指针前你需要声明指针。
- 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。使用&字符放在变量前面对变量进行“取地址”操作。 Go语言中的值类型(int、float、bool、string、array、struct)都有对应的指针类型,如:*int、*int64、*string 等。
& 取内存地址
* 根据内存地址取值
package main
import "fmt"
func main() {
var n1 int = 10
fmt.Println("n1的内存地址为:", &n1) //获取n1的内存地址值为:0xc00001c0b8
var n2 *int = &n1 //n2为整型类指针,将n1的内存地址赋值给n2
fmt.Println("n2的值为:", n2) //输出的为n1的内存地址
fmt.Println("n2地址指向的值为:", *n2) //输出的为n1的内存地址指向的值,为10
}
输出结果
n1的内存地址为: 0xc00001c0b8
n2的值为: 0xc00001c0b8
n2地址指向的值为: 10
1. 可以通过指针改变指向值
package main
import "fmt"
func main() {
var s1 string = "a"
fmt.Println("s1的值为:", s1)
var p1 *string = &s1 //定义p1的类型为字符串类型指针,将s1的内存地址赋值给p1
*p1 = "b" //将p1内存地址指向的值重新赋值为b
fmt.Println("s1的值为:", s1) //由于s1的内存地址没变,内存地址指向的值重新赋值了,所以重新输出s1的值为b
}
输出结果
s1的值为: a
s1的值为: b
2.指针变量接收的一定是地址值
package main
import "fmt"
func main() {
var n2 int = 100
var p2 *int = n2
fmt.Println("p2的值为:", p2)
}
输出结果
cannot use n2 (variable of type int) as *int value in variable declaration
3.指针变量的类型不可以和内存地址不匹配
package main
import "fmt"
func main() {
var f1 float32 = 0.123
var p3 *float64 = &f1 //定义p3的类型为float64类型指针,将f1的内存地址赋值给p3,由于f1为float32类型,跟*float64类型不匹配
fmt.Println(p3)
}
输出结果
cannot use &f1 (value of type *float32) as *float64 value in variable declaration
golang 指针的更多相关文章
- TODO:Golang指针使用注意事项
TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...
- Golang指针与unsafe
前言 我们知道在golang中是存在指针这个概念的.对于指针很多人有点忌惮(可能是因为之前学习过C语言),因为它会导致很多异常的问题.但是很多人学习之后发现,golang中的指针很简单,没有C那么复杂 ...
- Golang指针
学过C语言的老司机都知道,指针就是一个变量,用于存储另一个变量的内存地址. 那么什么是变量呢?在现代计算机体系结构中所有的需要执行的信息代码都需要存储在内存中,为了管理存储在内存的数据,内存是划分为不 ...
- Golang - 指针与引用
Golang有指针 , 那么一切数据都是值传递吗 ? 都需要用户进行指针传递吗, 其实不然, 对于Go语言, 虽然有指针, 但是其也有引用传递. 是不是很绕, 因为引用传递就是指针传递哇 . 我们 ...
- Golang指针基本介绍及使用案例
一.指针的相关概念说明 变量:是基本类型,变量存的就是值,也叫值类型 地址:用于引用计算机的内存地址,可理解为内存地址的标签,通俗一点讲就是一间房在小区里的门牌号.如下图① 指针:指针变量存的是一个地 ...
- golang 指针在struct里的应用
type aa struct { b *int c string } func main() { var data int = 0 var ip *int /* 声明指针变量 */ ip = & ...
- Golang 指针理解
目录 0x00 指针地址和指针类型 0x01 从指针获取指针指向的值 0x02 使用指针修改值 0x03 返回函数中局部变量 0x04 使用 new() 创建指针 0x05 flag包的指针技术 0x ...
- golang 指针类型学习
对于指针类型不安全编程,通过指针值以及偏移量操作slice私有属性 // 通过指针值获取切片 func TestGetPrivate(t *testing.T) { s := []int{1, 2, ...
- golang指针接收者和值接收者方法调用笔记
初学go时很多同学会把 值接收者 和 指针接收者 的方法相互调用搞混淆,好多同学都只记得指针类型可以调用值接收者方法和指针接收者方法,而值类型只能调用值接收者方法,其实不然,在某些情况下,值类型也是可 ...
- golang指针函数
func main() { a := models.SmsVerify{} a.Id = 100 fmt.Println(a.Id) // 100 test111(a) fmt.Println(a.I ...
随机推荐
- xxx.app 已损坏,无法打开,你应该将它移到废纸篓/打不开 xxx,因为它来自身份不明的开发者解决方法
xxx已损坏,无法打开,你应该将它移到废纸篓解决办法 打不开 xxx,因为它来自身份不明的开发者 打不开xxxx,因为 Apple 无法检查其是否包含恶意软件 在安装的时候提示加载失败! 解决: 打开 ...
- 一条sql同时返回多个count结果
select * from (select alarm_content name, count(id) `count` from ai_alarm WHERE alarm_content IS NOT ...
- iframe 父子页面调用vue函数,并解决跨域问题,宽度自适应
第一: 1. 父页面 html <iframe id="external-frame" name="external-frame" ref="i ...
- Kubernetes--容器重启策略和Pod终止过程
容器的重启策略 容器程序发生崩溃或容器申请超出限制的资源等原因都可能会导致Pod对象的终止,此时是否应该重建该Pod对象则取决于其重启策咯(restartPolicy)属性的定义. 1)Always: ...
- Delphi获取程序版本号
参考: http://www.delphitop.com/html/hanshu/4627.html procedure GetVersionInfo(const FileName:string; v ...
- 一套 .NET开发的邮箱Mail开源库
今天给大家推荐一个基于.Net开发的邮箱开源库. 邮箱在我们日常工作中,可以说是非常常见了.个人邮箱一般都是免费的,但企业邮箱会收费,虽然一般情况下,市面邮箱已经够用了.但有些企业对内容安全要求比较严 ...
- Linux 第五节(特殊权限,隐藏权限,SU,SUDO,FHS文件系统层次化标准)
特殊权限 SUID 执行者临时获取命令的所有权限(对程序进行设置) SGID 目录内新文件所有组,继承原有目录所有组的名称 SBID 粘滞位,保护位 chmod +权限 文件 chmod ...
- linux 的防火墙 ufw、firwalld、iptables 、
防火墙综述 linux 防火墙,常用的包括三种:ufw . firewalld 和 iptables.学习难度依次递增. ufw 因为原生的 iptable 配置麻烦,学习成本较高. ufw全称 Un ...
- 雪花算法生成ID重复问题
转载自: https://www.jianshu.com/p/71286e89e0c5
- Vue2+Cesium1.9+热力图开发笔记
1.安装cesiumJS.heatmap.webpack插件依赖包: yarn install/npm install "dependencies": { ... "ce ...