go之变量、指针、引用地址
一、值类型
- 定义和说明
定义:变量直接指向存在内存中的值,我们称之为值类型。
值类型的变量的值存储在栈中。
值类型 将一个变量赋值给另一个变量 被称为值拷贝
- 实例
package main
import "fmt"
func main(){
var num1,num2 int
num1 = 10
num2 = num1 // 值类型赋值操作
fmt.Println(num1,num2) // 10 10
num1 = 20
fmt.Println(num1,num2) // 20 10
}
二、指针类型
- 定义
一个变量指向内存中值所在的内存地址,我们称这个变量为指针类型
go 语言中的指针与C/C++ 中的指针用法是一样的,只是出于安全性的考虑go增加了:
1、不同类型的指针不能互相转化
2、任何普通指针类型*T和uintptr之间不能互相转化
3、指针变量不能进行运算
- 实例
package main
import "fmt"
func main(){
var num int = 100
var ptr *int // 类型前 加 * 表示这是指针类型,指针类型的初始值为nil ,和其他语言的NUll,None一样
ptr = &num // & 取num 变量的内存地址。 因为ptr 是指针,指向的是内存地址,所以需要赋值操作的是内存地址
fmt.Println("ptr 指针的值:",ptr)
fmt.Println("*ptr 指针的值:",*ptr) // * 取指针内存地址所指向的值
num = 200
fmt.Println("*ptr 指针的值:",*ptr)
}
结果:
ptr 指针的值: 0xc000048080
*ptr 指针的值: 100
*ptr 指针的值: 200
- *ptr 没有操作,为什么值发生了变化
ptr 是指针类型,并被赋予了 num 的内存地址,当num值发现变化时,实际也就是 ptr 内存地址所对应的值变了
因为 ptr内存地址所对应的 内存值就是num的值
三、值与内存地址与指针
1、变量是抽象出来的概念,go语言程序运行时即表示内存值
2、内存地址即 内存值所在的内存空间的编号
3、指针变量:是一种占位符,用于引用计算机的内存地址。可理解为内存地址的标签
四、取地址与解引用
- 说明
在go语言中我们可以通过
& 是取地址符号 , 即取得某个变量的地址 , 如 ; &a
* 是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , 也就是这个地址所存储的值
- 运用
package main
import "fmt"
func main(){
var n1,n2,n3 int
n1 = 100
n2 = 200
n3 = 3
swap(&n1,&n2) // 传内存地址
add(&n3) // 取内存地址
fmt.Println(n1) // 200
fmt.Println(n2) // 100
fmt.Println(n3) // 4
var num *int // 申明一个int 指针类型
num = &n3 // 所以可以赋值 内存地址
add(num)
fmt.Println("num指针变量的内存值:",*num) // *num == 5
// 此时n3 == 5
}
// 传入 两个指针类型的数据.
func swap(i,j *int){
*i,*j = *j,*i // 值的替换
}
func add(num *int){
// *num 解引用
*num = *num + 1
}
五、引用类型
在go语言中目前引用类型有: 切片、map、chan、func
引用类型可以简单的理解为指针
这个后面会介绍
如果喜欢看小说,请到183小说网
go之变量、指针、引用地址的更多相关文章
- C++ 指针 引用 变量引用
变量引用: 引用的作用就是给变量起个别名,假如有一个变量a,想给它起个别名b, 可以这么写:int a;//定义a是整型变量.int &b=a;//声明b是a的引用. 上面就是 ...
- PHP变量作用域以及地址引用问题
作用域的概念: 在PHP脚本的任何位置都可以声明变量,但是,声明变量的位置会大大影响访问变量的范围.这个可以访问的范围称为作用域. 主要的常用的包括:局部变量.全局变量.静态变量. 1.局部变量:就是 ...
- Little-endian的一个好处:在变量指针转换的时候地址保持不变
Big-endian 的内存顺序和数字的书写顺序是一致的,方便阅读理解.Little-endian 在变量指针转换的时候地址保持不变,比如 int64* 转到 int32* 各有利弊,统一就好,目前看 ...
- c++,基类声明的指针变量和引用类型变量可以指向派 生类的对象
基类声明的指针变量和引用类型变量可以指向派生类的对象,而反过来派生类的指针却不能指向基类变量. 这与基类和派生类之间,被允许的赋值方向是相反的. 但是从逻辑上很容易推敲其合理性.
- 大一C语言学习笔记(7)---指针篇--什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?
"指针是C语言的灵魂"这句话一开始我没怎么明白,现在接触了指针,终于知道为什么这么说了,因为....难,真难:下面说一下我对这句话的见解: C语言拥有着其他语言所没有的特性---直 ...
- paip.指针 引用 c++ java的使用总结.
paip.指针 引用 c++ java的使用总结. ///////////////一般一个变量包括下面的信息 a.地址(指针) b.命名(引用,别名) c.变量内容.. 指针是一个变量的地址, ...
- Python中的变量、引用、拷贝和作用域
在Python中,变量是没有类型的,这和以往看到的大部分编辑语言都不一样.在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可.但是,当用变量的时候,必须要给这个变量赋值:如果只写一个变量,而没 ...
- 深入理解PHP原理之变量分离/引用
19 Sep 08 深入理解PHP原理之变量分离/引用(Variables Separation) 作者: Laruence( ) 本文地址: http://www.laruence.com/20 ...
- Delphi函数翻译成VC要注意句柄指针传递(传递Handle的时候,必须加上一个指针引用,才能消除编译错误)
Delphi里做了魔法变化,每个变量名称本身就是指针,因为不怎么需要指针语法.我也不知道是不是因为这个原因引起的Delphi与VC对句柄的不同处理. 这是Delphi的强行关机函数,好用,调用方式:W ...
随机推荐
- HDU_1028_Ignatius and the Princess III_(母函数,dp)
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- IOS7升级攻略
1) Select the main view, set the background color to black (or whatever color you want the status ba ...
- js基本类型的包装对象
var test = "test"; test.a = "hello"; console.log(test.a); 在JavaScript中,“一切皆对象”,数 ...
- sublime text3 verilog代码编写高级操作篇
2018.10.21 好久没写博客了,这段时间一直在学习一直在沉淀,然而发现学的越多会的更少,只能快马加鞭吧! 博主从大一暑假接触FPGA,到现在快一年半了,时间恍逝.刚开始入门也是用的quartus ...
- 控制台输出(System.out.printf)的使用
一. 介绍 System.out.printf 与 C语言中的 printf 使用方法类似,可以向控制台(Console) 输出指定格式的内容.使用 System.out.printf 的方法比使 ...
- Django - ORM实现用户登陆
1.路由分发cmdb(app)下urls.py中,建立url与函数对应关系 2.login.html代码: 3.views.py中,login函数,确认是否登陆成功 备注:从前端 获取用户名,密码,在 ...
- Python学习【第5篇】:Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器、模块)
一.为什么要使用函数? 1.避免代码重用 2.提高代码的可读性 二.函数的定义与调用 1. def 函数名(参数1,参数2): ''' 函数注释''' print('函数体') return 返回值 ...
- Chromium CEF 2623 -- 支持 xp 的最后一个版本源码下载和编译步骤
背景 因为项目需要在客户端中内嵌浏览器,需要支持 xp 操作系统和播放视频,但 CEF 2623 以后的版本已经不支持 xp 操作系统,也不再提供 2623 版本的二进制发布包下载,只好自己手动编译. ...
- 生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583)
如果x加上x的各个数字之和得到y,就说x是y的生成元.给出n(1≤n≤100000),求最小 生成元.无解输出0.例如,n=216,121,2005时的解分别为198,0,1979. [分析] 本题看 ...
- Python3 编写登陆接口
题目选自 Alex Python自动化开发之路的题目,我是从C++转学Python的,编写的水平有限,轻喷. 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 首先应该有2个txt文件,包含用户 ...