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

    简介 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并接入多家公司线上产品线,开箱即用. https://www.cnblogs.com/x ...

  2. Software_C#_grammer_Deletegate--Strategy

    2018-04-30 18:59:04. 由 委托的 动态选择方法 联想到的 Strategy Pattern 一 : 策略模式 将  宿主   与  算法 分离, 算法被封装为对象, 客户端代码用 ...

  3. vue过滤出字符串中的汉字,match加正则

    vue过滤出字符串中的汉字,match加正则 str="23申迪MTN001(102380026)";str.match(/[\u4e00-\u9fa5]/g).join(&quo ...

  4. DEDE在文章列表文章没有缩略图的不显示图片,有的则显示缩略图

    解决在文章列表文章没有缩略图的不显示图片,有的则显示缩略图在5.3最开始的版本.好象是有这个功能的. 就是在列表里..如果改文章没有缩略图则不显示默认的 没有缩略图的土片.如果有则显示缩略图 但在后续 ...

  5. tomcat程序闪退,如何让tomcat不闪退,可以看见报错

    1.在 startup.bat 文件最后加 pause 2.cd 到tomcat bin 目录下执行 startup.bat 3.直接去Tomcat目录下的log看输出日志,即catalina.out ...

  6. Python的入门学习Day 10——form”夜曲编程“

    Day 10 time:2021.8.7. 今天本来打算学习时发现手机应该拿去充电了,再上完J课程之后发现时间确实只留到了晚上呢 .但幸好,以我多天的敲代码的牢固根基(哈哈哈),我最终还是弥补回来了. ...

  7. Python列表等长度分割

    1 def list_of_groups(init_list, childern_list_len): 2 ''' 3 :param init_list: 4 :param childern_list ...

  8. 可收集ALC问题[Microsoft.Data.SqlClient is not supported on this platform.]

    异常 Microsoft.Data.SqlClient is not supported on this platform. 堆栈跟踪 at Microsoft.Data.SqlClient.SqlC ...

  9. 解决手机点击包含a、button标签时出现背景色问题

    a,button { display: inline-block; width: 100%; -webkit-tap-highlight-color:rgba(0,0,0,0);/*添加此样式即可去除 ...

  10. CAD专用卸载工具,完美彻底卸载清除干净cad各种残留注册表和文件。

    CAD专用卸载工具,完美彻底卸载清除干净cad各种残留注册表和文件.有的同学由于一些原因想把cad卸载掉然后重新安装,但是cad安装到一半就失败了或者显示已安装或者未完成,还有的同学会遇到" ...