• 一个指针变量指向了一个值的内存地址,类似于变量和常量,在使用指针前你需要声明指针。
  • 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。使用&字符放在变量前面对变量进行“取地址”操作。 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. 禅道服务崩溃 Can't init tc log

      0.环境 禅道 版本12.4.3 数据库 10.1.22-MariaDB SQL 服务器 192.168.0.82 centos 7 step 1.问题 磁盘爆满后,禅道在启动时报数据库 Can' ...

  2. P2016题解

    P2016题解 题目描述 Bob要建立一个古城堡,城堡中的路形成一棵无根树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能瞭望到所有的路. 注意,某个士兵在一个结点上时,与该结点相连的所有边将 ...

  3. beego框架中的注解路由不生效的问题

    在测试中发现 使用注解路由的话 项目需要在gopath路径下的src下才可以 并且配置文件的 runmode = dev 然后执行bee run 在路由文件夹里才会生成commentRouter文件 ...

  4. 前端本地实现分页,利用了antd的分页和数组的切片

    html的结构 <a-pagination v-bind="pagination" @change="updatePage" @showSizeChang ...

  5. HCIP-进阶实验03-网络流量路径控制

    HCIP-进阶实验03-网络流量路径控制 实验需求 某城域网网络环境部署规划如图所示,该网络通过OSPF协议进行部署设计,分为四个区域,分别为骨干区域0.普通区域1.2.3.其中普通区域1为特殊区域N ...

  6. HCIP-ICT实战进阶05-路由策略与策略路由

    HCIP-ICT实战进阶05-路由策略与策略路由 0 前言 什么是路由策略? 基于报文的目的IP地址进行路由表查找, 之后转发数据; 针对控制平面, 为路由协议和路由表服务, 针对路由信息进行过滤或者 ...

  7. [OC] 按照 元素 中的某个属性 来对数组进行排序

    数组需要是 NSMutableArray 类型: //ascending - YES:升序,1,2,3 NO:降序:3,2,1 NSArray *sortDescriptors = [NSArray ...

  8. python 链表推导式x for xx in yy

    一.(x for xx in yy )当x为固定参数 如: n = 10 # 生成n个0 matrix = [0 for i in range(n)]# 这里面0代表返回值,后面的for循环就是返回的 ...

  9. Neo4j权威指南学习笔记第一章

    1.创建图数据库 1.1.创建电影节点 CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to ...

  10. 模拟ATM系统 —— 用户注册、登录和用户操作页设计 、查询账号、退出账号功能

    开发工具:idea 一.项目步骤: 1.系统准备.首页设计 2.用户开户功能 3.用户登录功能 4.用户操作页设计 .查询账号.退出账号功能 5.用户存款功能 6.用户取款功能 7.用户转账功能 8. ...