一、值类型

  • 定义和说明
  1. 定义:变量直接指向存在内存中的值,我们称之为值类型。
  2. 值类型的变量的值存储在栈中。
  3. 值类型 将一个变量赋值给另一个变量 被称为值拷贝
  • 实例
  1. package main
  2. import "fmt"
  3. func main(){
  4. var num1,num2 int
  5. num1 = 10
  6. num2 = num1 // 值类型赋值操作
  7. fmt.Println(num1,num2) // 10 10
  8. num1 = 20
  9. fmt.Println(num1,num2) // 20 10
  10. }

二、指针类型

  • 定义
  1. 一个变量指向内存中值所在的内存地址,我们称这个变量为指针类型
  2. go 语言中的指针与C/C++ 中的指针用法是一样的,只是出于安全性的考虑go增加了:
  3. 1、不同类型的指针不能互相转化
  4. 2、任何普通指针类型*Tuintptr之间不能互相转化
  5. 3、指针变量不能进行运算
  • 实例
  1. package main
  2. import "fmt"
  3. func main(){
  4. var num int = 100
  5. var ptr *int // 类型前 加 * 表示这是指针类型,指针类型的初始值为nil ,和其他语言的NUll,None一样
  6. ptr = &num // & 取num 变量的内存地址。 因为ptr 是指针,指向的是内存地址,所以需要赋值操作的是内存地址
  7. fmt.Println("ptr 指针的值:",ptr)
  8. fmt.Println("*ptr 指针的值:",*ptr) // * 取指针内存地址所指向的值
  9. num = 200
  10. fmt.Println("*ptr 指针的值:",*ptr)
  11. }
  1. 结果:
  2. ptr 指针的值: 0xc000048080
  3. *ptr 指针的值: 100
  4. *ptr 指针的值: 200
  • *ptr 没有操作,为什么值发生了变化
  1. ptr 是指针类型,并被赋予了 num 的内存地址,当num值发现变化时,实际也就是 ptr 内存地址所对应的值变了
  2. 因为 ptr内存地址所对应的 内存值就是num的值

三、值与内存地址与指针

  1. 1、变量是抽象出来的概念,go语言程序运行时即表示内存值
  2. 2、内存地址即 内存值所在的内存空间的编号
  3. 3、指针变量:是一种占位符,用于引用计算机的内存地址。可理解为内存地址的标签

四、取地址与解引用

  • 说明
  1. go语言中我们可以通过
  2. & 是取地址符号 , 即取得某个变量的地址 , ; &a
  3. * 是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , 也就是这个地址所存储的值
  • 运用
  1. package main
  2. import "fmt"
  3. func main(){
  4. var n1,n2,n3 int
  5. n1 = 100
  6. n2 = 200
  7. n3 = 3
  8. swap(&n1,&n2) // 传内存地址
  9. add(&n3) // 取内存地址
  10. fmt.Println(n1) // 200
  11. fmt.Println(n2) // 100
  12. fmt.Println(n3) // 4
  13. var num *int // 申明一个int 指针类型
  14. num = &n3 // 所以可以赋值 内存地址
  15. add(num)
  16. fmt.Println("num指针变量的内存值:",*num) // *num == 5
  17. // 此时n3 == 5
  18. }
  19. // 传入 两个指针类型的数据.
  20. func swap(i,j *int){
  21. *i,*j = *j,*i // 值的替换
  22. }
  23. func add(num *int){
  24. // *num 解引用
  25. *num = *num + 1
  26. }

五、引用类型

  1. go语言中目前引用类型有: 切片、mapchanfunc
  2. 引用类型可以简单的理解为指针
  3. 这个后面会介绍

如果喜欢看小说,请到183小说网

go之变量、指针、引用地址的更多相关文章

  1. C++ 指针 引用 变量引用

    变量引用: 引用的作用就是给变量起个别名,假如有一个变量a,想给它起个别名b,         可以这么写:int a;//定义a是整型变量.int &b=a;//声明b是a的引用. 上面就是 ...

  2. PHP变量作用域以及地址引用问题

    作用域的概念: 在PHP脚本的任何位置都可以声明变量,但是,声明变量的位置会大大影响访问变量的范围.这个可以访问的范围称为作用域. 主要的常用的包括:局部变量.全局变量.静态变量. 1.局部变量:就是 ...

  3. Little-endian的一个好处:在变量指针转换的时候地址保持不变

    Big-endian 的内存顺序和数字的书写顺序是一致的,方便阅读理解.Little-endian 在变量指针转换的时候地址保持不变,比如 int64* 转到 int32* 各有利弊,统一就好,目前看 ...

  4. c++,基类声明的指针变量和引用类型变量可以指向派 生类的对象

    基类声明的指针变量和引用类型变量可以指向派生类的对象,而反过来派生类的指针却不能指向基类变量. 这与基类和派生类之间,被允许的赋值方向是相反的. 但是从逻辑上很容易推敲其合理性.

  5. 大一C语言学习笔记(7)---指针篇--什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?

    "指针是C语言的灵魂"这句话一开始我没怎么明白,现在接触了指针,终于知道为什么这么说了,因为....难,真难:下面说一下我对这句话的见解: C语言拥有着其他语言所没有的特性---直 ...

  6. paip.指针 引用 c++ java的使用总结.

    paip.指针 引用  c++ java的使用总结. ///////////////一般一个变量包括下面的信息 a.地址(指针)  b.命名(引用,别名)   c.变量内容.. 指针是一个变量的地址, ...

  7. Python中的变量、引用、拷贝和作用域

    在Python中,变量是没有类型的,这和以往看到的大部分编辑语言都不一样.在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可.但是,当用变量的时候,必须要给这个变量赋值:如果只写一个变量,而没 ...

  8. 深入理解PHP原理之变量分离/引用

    19 Sep 08 深入理解PHP原理之变量分离/引用(Variables Separation) 作者: Laruence(   ) 本文地址: http://www.laruence.com/20 ...

  9. Delphi函数翻译成VC要注意句柄指针传递(传递Handle的时候,必须加上一个指针引用,才能消除编译错误)

    Delphi里做了魔法变化,每个变量名称本身就是指针,因为不怎么需要指针语法.我也不知道是不是因为这个原因引起的Delphi与VC对句柄的不同处理. 这是Delphi的强行关机函数,好用,调用方式:W ...

随机推荐

  1. Discuz 首页图文列表实现

    <div id="shoucang"> <!--{eval $list_count=0;}--> <!--{loop $threadlist $thr ...

  2. mvc 类中对应数据库属性

    [StringLength()] //可空 对应数据库可空 [DefaultValue("")] [DisplayName("添加人用户名")] public ...

  3. Redis事物及锁的运用

    redis与mysql事物比较如下: 下面是一个redis事物运用于买票的demo

  4. Photoshop如何实现图片相对画布居中

    先按ctrl+A,再选择要居中的图层,然后就会发现居中按钮被激活了

  5. mysql5.7初始化密码报错ERROR1820(HY000):YoumustresetyourpasswordusingALTERUSERstateme

    1,mysql5.6是密码为空直接进入数据库的,但是mysql5.7就需要初始密码 cat /var/log/mysqld.log | grep password 或者:grep 'temporary ...

  6. Python培训时长多久可以学会?马哥教育9年经验之谈

    在Python成为一门炙手可热的语言之后,很多人也开始准备向这个行业发展.技术入行也就是培训和自学两条路,各有优劣,不过培训因为学习比较系统比较快也受到不少人欢迎. 今天我就来给大家分享一下Pytho ...

  7. Oracle,sqlserver,mySQl的区别和联系:

    1.日期处理方式 2.对保留字和关键字的处理方式: Oracle,sqlserver,mySQl的保留字不可以用作列字段,关键字可以,但他们对关键字的处理方式又不同: Oracle:关键字作为列时:用 ...

  8. 【上海站】EOLINKER 用户培训之旅,等你来共建API新连接

    从今年3月4日起,EOLINKER AMS 团队将再次开启全国用户培训之旅.本次全国培训之旅依旧将覆盖北上广深等国内主要城市,重点提供两种服务内容,一是 对 EOLINKER 产品的交流,包括 API ...

  9. vue 打印 页面特定部分转pdf

    https://www.jb51.net/article/147040.htm https://www.jianshu.com/p/dd120b65446a  //转pdf

  10. 3.Linux的远程管理及网络下载

    3.1 Linux的远程管理 3.1.1 远程管理概述 什么是远程管理: 1.为什么需要远程管理: 服务器通常是Linux系统,而服务器不可能一直在身边,所以就需要远程来操作服务器 企业中通常需要集群 ...