(八)golang--复杂类型之指针
首先我们要明确:
(1)基本数据类型:变量存的就是值,也叫值类型;
(2)获取变量的地址,用&,例如var num int,获取num的地址:#
(3)指针类型:变量存的是一个地址,这个地址指向的空间存的才是值,例如var ptr *int = #
(4)获取指针类型所指向的值,使用*,例如var *ptr int,使用*ptr获取ptr指向的值;
package main import (
"fmt"
) func main() {
var num int = 1
var ptr *int = &num
fmt.Println("num的地址是:", &num)
fmt.Println("ptr的值是:", ptr)
fmt.Println("ptr的地址是:", &ptr)
}

ptr是一个指针,它的值是num的地址,同时,它自己也会有一个地址。我们可以通过地址定位到变量并改变变量的值:
package main import (
"fmt"
) func main() {
var num int = 1
var ptr *int
fmt.Println("num的值是:", num)
ptr = &num
*ptr = 10
fmt.Println("num的值是:", num)
}

我们还可以通过切换指针的值来改变不同变量的值:注意指针类型与变量类型之间要匹配。
package main import (
"fmt"
) func main() {
var num1 int = 1
var num2 int = 2
var ptr *int
fmt.Println("num1的值是:", num1)
fmt.Println("num2的值是:", num2)
ptr = &num1
*ptr = 10
ptr = &num2
*ptr = 20
fmt.Println("num1的值是:", num1)
fmt.Println("num2的值是:", num2)
}

指针使用细节:
(1)值类型,都有对应的指针,形式为*数据类型,比如int对应的指针就是*int,float32对应的指针就是*float;
(2)值类型包括:基本数据类型int系列、float系列、bool、string、数组和结构体;
值类型和引用类型:
(1)值类型包括:基本数据类型int系列、float系列、bool、string、数组和结构体;
(2)引用类型:指针、slice切片、map、管道channel、interface等;
值类型和引用类型的区别:
(1)值类型,变量直接存储,内存通常在栈中分配;
(2)引用类型:变量存储的是一个地址,这个地址对应的空间才是真正存储的数据值,内存通常在堆上分配,当没有任何变量引用这个地址时,改地址对应的数据空间就是一个垃圾,由GC来回收;
(八)golang--复杂类型之指针的更多相关文章
- Golang - 复合类型
目录 Golang - 复合类型 1. 指针 2. new()和make() 3. 数组 4. slice 5. Map 6. 结构体 7. 结构体参数 Golang - 复合类型 1. 指针 go语 ...
- GO自定义类型与指针
指针 定义:将地址形象化的称为“指针”.将地址形象化的称为“指针”.意思是通过它能找到以它为地址的内存单元.一个指针变量指向了一个值的内存地址.意思是通过它能找到以它为地址的内存单元.一个指针变量指向 ...
- Golang基本类型整理
总是用的用的就模糊了,不知道基本的类型有哪些,看来要反反复复弄几次. Golang基本类型整理 基本类型以及定义变量需要注意的 对于基本类型的介绍,感觉这个博客讲的比较透彻,基本上都是从源码的角度来入 ...
- golang枚举类型 - iota用法拾遗
在c#.java等高级语言中,经常会用到枚举类型来表示状态等.在golang中并没有枚举类型,如何实现枚举呢?首先从枚举的概念入手. 1.枚举类型定义 从百度百科查询解释如下:http://baike ...
- 不同类型的指针+1之后增加的大小不同(a,&a的地址是一样的,但意思不一样)
main() { ]={,,,,}; ); printf(),*(ptr-)); } *(a+1)就是a[1],*(ptr-1)就是a[4], 执行结果是2, 5.&a+1不是首地址+1,系统 ...
- C++:不同类型的指针的本质与差异
转自:http://blog.csdn.net/richerg85/article/details/10076365 指针的类型(The Type of a Pointer) 一 ...
- 直接修改托管堆栈中的type object pointer(类型对象指针)
都知道.NET是一个强对象类型的框架. 那么对于对象类型又是怎么确定的呢. 最初的我简单认为数据的类型就是定义时字段的类型修饰决定的(回来发现这种观点是绝对错误的) 我们知道引用对象存储在托管堆栈中, ...
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?为什么在类体内可以定义将静态成员声明为其所属类的类型呢 ?
static的成员变量,不是存储在Bar实例之中的,因而不会有递归定义的问题. 类声明: class Screen: //Screen类的声明 1 类定义: class Screen{ //Scree ...
- C# CLR via 对象内存中堆的存储【类型对象指针、同步块索引】
最近在看书,看到了对象在内存中的存储方式. 讲到了对象存储在内存堆中,分配的空间除了类型对象的成员所需的内存量,还有额外的成员(类型对象指针. 同步块索引 ),看到这个我就有点不懂了,不知道类型对象指 ...
- LPVOID 没有类型的指针
可以将LPVOID类型的变量赋值给任意类型的指针,比如在参数传递时就可以把任意类型传递给一个LPVOID类型为参数的方法,然后在方法内再将这个“任意类型”从传递时的“LPVOID类型”转换回来. 示例 ...
随机推荐
- jQuery查找节点(选择器)
jQuery通过选择器来完成节点的查找: 1.基本选择器: ①通用/所有的选择器:$("*") //使用*号来表示. ②:标签选择器:$("标签名(div)") ...
- [Tricks] 为文件夹右键菜单增加 【使用VS Code 打开】
传统的IDE安装之后都会在文件夹的右键菜单中增加如[Open in Visual Studio]或者[Open Folder as IntelliJ IDEA Project]这样的选项 但VS Co ...
- Kafka 学习笔记之 Topic日志清理
Topic日志清理 server.properties: log.cleanup.policy=delete (默认) 1. 按时间维度进行Kafka日志清理 log.retention.hours= ...
- MyBatis详解 一篇就够啦
第1章MyBatis框架配置文件详解 1.1 typeHandlers类型转换器 每当MyBatis 设置参数到PreparedStatement 或者从ResultSet 结果集中取得值时,就会使用 ...
- Vue入门教程 第三篇 (条件与循环)
v-if语法(条件) 符合条件时显示(渲染)某一元素. <div id="app"> <div v-if="ok"> <h1> ...
- 基于MQTT协议的云端proxy远程登陆
这篇文件是建立在一下两篇文章基础上完成的 很多重复的内容不会在这章提到 https://www.cnblogs.com/y-c-y/p/11685405.html telnet协议相关 https:/ ...
- linux上安装LAMP笔记
B哥最近在参加比赛,需要把一个php项目部署到服务器上,故此在linux上安装LAMP环境,用于部署项目,第一次安装,做点儿笔记记录一下. 安装条件: Redhat或者CentOS linux环境已装 ...
- 代码审计-YXcms1.4.7
题外: 今天是上班第一天,全都在做准备工作,明天开始正式实战做事. 看着周围稍年长的同事和老大做事,自己的感觉就是自己还是差的很多很多,自己只能算个废物. 学无止境,我这样的垃圾废物就该多练,保持战斗 ...
- 数据挖掘:python数据清洗cvs里面带中文字符
数据清洗,使用python数据清洗cvs里面带中文字符,意图是用字典对应中文字符,即key值是中文字符,value值是index,自增即可:利用字典数据结构没有重复key值的特性,把中文字符映射到了数 ...
- Linux下mqttServer搭建
1.apache-apollo 创建服务 tar -zxvf apache-apollo-1.7-unix-distro.tar.gz cd /home/bk/apache-apollo-/bin . ...