• 一个指针变量指向了一个值的内存地址,类似于变量和常量,在使用指针前你需要声明指针。
  • 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。使用&字符放在变量前面对变量进行“取地址”操作。 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 指针的更多相关文章

  1. TODO:Golang指针使用注意事项

    TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...

  2. Golang指针与unsafe

    前言 我们知道在golang中是存在指针这个概念的.对于指针很多人有点忌惮(可能是因为之前学习过C语言),因为它会导致很多异常的问题.但是很多人学习之后发现,golang中的指针很简单,没有C那么复杂 ...

  3. Golang指针

    学过C语言的老司机都知道,指针就是一个变量,用于存储另一个变量的内存地址. 那么什么是变量呢?在现代计算机体系结构中所有的需要执行的信息代码都需要存储在内存中,为了管理存储在内存的数据,内存是划分为不 ...

  4. Golang - 指针与引用

    ​ Golang有指针 , 那么一切数据都是值传递吗 ? 都需要用户进行指针传递吗, 其实不然, 对于Go语言, 虽然有指针, 但是其也有引用传递. 是不是很绕, 因为引用传递就是指针传递哇 . 我们 ...

  5. Golang指针基本介绍及使用案例

    一.指针的相关概念说明 变量:是基本类型,变量存的就是值,也叫值类型 地址:用于引用计算机的内存地址,可理解为内存地址的标签,通俗一点讲就是一间房在小区里的门牌号.如下图① 指针:指针变量存的是一个地 ...

  6. golang 指针在struct里的应用

    type aa struct { b *int c string } func main() { var data int = 0 var ip *int /* 声明指针变量 */ ip = & ...

  7. Golang 指针理解

    目录 0x00 指针地址和指针类型 0x01 从指针获取指针指向的值 0x02 使用指针修改值 0x03 返回函数中局部变量 0x04 使用 new() 创建指针 0x05 flag包的指针技术 0x ...

  8. golang 指针类型学习

    对于指针类型不安全编程,通过指针值以及偏移量操作slice私有属性 // 通过指针值获取切片 func TestGetPrivate(t *testing.T) { s := []int{1, 2, ...

  9. golang指针接收者和值接收者方法调用笔记

    初学go时很多同学会把 值接收者 和 指针接收者 的方法相互调用搞混淆,好多同学都只记得指针类型可以调用值接收者方法和指针接收者方法,而值类型只能调用值接收者方法,其实不然,在某些情况下,值类型也是可 ...

  10. golang指针函数

    func main() { a := models.SmsVerify{} a.Id = 100 fmt.Println(a.Id) // 100 test111(a) fmt.Println(a.I ...

随机推荐

  1. web基础(6): CSS综合实例-咖啡网页设计

    咖啡店案例效果图 (一)页面的布局 1. 最上方的header:右下角是四个小图标,像图层一样附加在当前的header部分上. 2. 超链接构成的导航栏,鼠标悬浮的时候字体颜色发生变化. 3. 主体分 ...

  2. Building fresh packages卡很久

    [NPM]Building fresh packages运行很久都没反应原创onemetre 最后发布于2019-12-24 10:20:13 阅读数 287 收藏展开[问题]通过YARN 安装,Bu ...

  3. flask中的线程隔离技术

    一.引入: 在无线程隔离情况下,通过线程调用函数,函数内部改变传入对象的属性值(排除非线程安全情况),都将更改传入的对象属性 1 import threading 2 3 class TestThre ...

  4. Postman 测试 Web Service 和 WCF

    一.postman 测试web service(1)设置url http://www.oorsprong.org/websamples.countryinfo/countryinfoservice.w ...

  5. 解决 VSCode git commit 时 No such file or directory 报错问题

    在git 进行 commit 时出现了 Git: .git/hooks/pre-commit: line 2: ./node_modules/pre-commit/hook: No such file ...

  6. XenForo论坛安装

    1.下载安装程序,程序可以到qq群里面找,或者是联系我 2.域名+/install安装 3.汉化后台,访问https://www.cnxfans.com/resources/xenforo-2-x.1 ...

  7. Android学习——控件ProgressBar

    1.常用属性

  8. insert_base_x.txt

    insert into g_temp.test_basevalues('20220202'::date, 1, 'apple'),('20220203'::date, 5, 'banana'),('2 ...

  9. ES6-Promise上

    一.Promise作用:解决回调地狱问题 transitionend是过渡结束事件,只要过渡结束就会触发: 回调地狱:指的是层层嵌套的回调函数,代码看起来非常晕 <!DOCTYPE html&g ...

  10. input放入焦点,选中全部文本

    async mounted(){ let inputList = document.querySelectorAll('input'); for (let index = 0; index < ...