GO语言复合类型01---指针
package main /*
%T 类型占位符
%v 值占位符
%p 地址(指针)占位符,只有地址才能替换%p
&value 对值取地址
*addr 对地址取值
**int 指向int型指针的指针
作用:函数传参时,传递指针叫引用传递,值传递是拷贝式的,对被传参数的修改是不会改变本体的,想要改变本体只能是引用传递
*/ import "fmt" //指针就是地址
//&value 对值取地址
//*ptr 对地址取值
func main021() { //声明变量a时,系统开辟了一块内存【地址】,里面存的【值】是123
var a int = 123
fmt.Printf("a的类型是%T\n", a)//int
fmt.Printf("a的值是%v\n", a)//123
fmt.Printf("a的地址是%p\n", &a)//0x... //&a取变量a的地址
aPointer := &a
fmt.Printf("aPointer的类型是%T\n",aPointer)//*int //将aPointer指向的地址中的值修改为456
*aPointer = 456
fmt.Println("*aPointer=",*aPointer)//456
//a的值就变成了456
fmt.Println("a=",a)
} //先定义原始变量,修改其指针中的值,会直接改变原变量
//指针如果没有重新赋值,永远指向同一块地址
func main022() { //系统给x分配了内存
var x = 456
fmt.Println(x)//456 //定义整型指针(存储整型数据的地址)
//默认赋值为空<nil>
var xPtr *int
fmt.Println("xPtr=", xPtr)//nil //aPtr指向x的地址
xPtr = &x //将xPtr指向的地址中的值修改为789
*xPtr = 789 fmt.Println(x) //789
fmt.Println(xPtr) //0xc042052080
fmt.Println(&x) //0xc042052080
fmt.Println(*xPtr) //789
fmt.Println(*xPtr == x) //true
fmt.Println(xPtr == &x) //true var y = 456
*xPtr = y
fmt.Println(x) //456
fmt.Println(xPtr) //没有变
fmt.Println(&x) //没有变
fmt.Println(*xPtr) //456
fmt.Println(*xPtr == y) //true
fmt.Println(x == y) //true
fmt.Println(&x == &y) //false
fmt.Println(xPtr == &y) //false
fmt.Printf("y的地址是%p\n",&y) fmt.Println("----------")
//xPtr指向y的地址
xPtr = &y
y = 789
fmt.Println(x) //456
fmt.Println(y) //789
fmt.Println(*xPtr) //789
fmt.Println(&x == xPtr) //false
} //指针是严格检测数据类型的
func main023() {
var x = 123
var intPtr *int
intPtr = &x
fmt.Println(intPtr, *intPtr) //0x...,123 //var y = "你妹"
//intPtr = &y//编译错误,【整型指针】无法赋值为【字符串的地址】
} //指针的指针
func main024() {
var x = 123
var mPtr *int = &x //var mmp **int
mmPtr := &mPtr
fmt.Println(mmPtr)//0xc042072018
fmt.Printf("mmPtr的类型是%T\n",mmPtr)//mmPtr的类型是**int //打印x的值
fmt.Println(*mPtr)//123
fmt.Println(*(*mmPtr))//123
fmt.Println(**mmPtr)//123
} func main() {
//main021()
//main022()
//main023()
main024()
}
GO语言复合类型01---指针的更多相关文章
- 实验c语言不同类型的指针互用(不推荐只是学习用)
#include <stdio.h> int main(int argc, char *argv[]) { printf("Hello, world\n"); ]; i ...
- GO语言复合类型04---映射
package main import "fmt" /* 映射(map)是键值对(key-value)数据的集合 根据键key可以快速检索值value 键值的类型可以是任意的,ke ...
- GO语言复合类型03---切片
切片相当于长度可以动态扩张的数组 array[start:end]从数组身上截取下标为[start,end)片段,形成切片start代表开始下标,不写默认代表从头开始切end代表结束下标(本身不被包含 ...
- GO语言复合类型02---数组
package main import "fmt" /* 固定长度.固定类型的数据容器 */ /*数组的声明*/ func main031() { //var array [5]i ...
- GO语言复合类型05---递归
package main import ( "fmt" "time" ) /* ·递归就是自己调自己 ·递归一定要有终止条件(否则就是无限死循环) */ /*使 ...
- Golang - 复合类型
目录 Golang - 复合类型 1. 指针 2. new()和make() 3. 数组 4. slice 5. Map 6. 结构体 7. 结构体参数 Golang - 复合类型 1. 指针 go语 ...
- go语言 类型:基础类型和复合类型
Go 语言中包括以下内置基础类型:布尔型:bool整型:int int64 int32 int16 int8 uint8(byte) uint16 uint32 uint64 uint浮点型:floa ...
- 带你学够浪:Go语言基础系列 - 8分钟学复合类型
★ 文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) " 对于一般的语言使用者来说 ,20% ...
- C语言中的复合类型
复合类型 一.掌握的类型 1. 指针数组 int * arr[10]; //arr是一个数组,有10个元素,每个元素都是一个指针,即arr是一个指针数组 int a,b,c,d; arr[0] = & ...
随机推荐
- hdu1526 二分匹配+ floyd
题意: 有N个插座,M个用电器,和K种转换器(每种有无限个),问最少多少个用电器无法充电. 思路 : 总的电器数 减去 电器和插座的最大匹配数 我有的是map去映射每一个串,根据转换器建边,然后跑一 ...
- 基于三层交换机的VRRP技术--MSTP、VRRP的综合运用
MSTP (多生成树) 每个VLAN或者几个VLAN拥有一颗生成树,基于实例的生成树.instance 1.instance 2 每个实例拥有一颗生成树.MSTP可以实现多VLAN 的负载分担,可以实 ...
- Python脚本写端口扫描器(socket,python-nmap)
目录 Socket模块编写 扫描给定主机是否开放了指定的端口 python-nmap模块编写 扫描给定ip或给定网段内指定端口是否开放 一个用python写的简单的端口扫描器,python环境为 3. ...
- Intel汇编语言程序设计学习-第三章 汇编语言基础-上
汇编语言基础 3.1 汇编语言的基本元素 有人说汇编难,有人说汇编简单,我个人不做评价,下面是一个简单的实例(部分代码): main PROC mov eax,5 ;5送EAX寄存器 add ...
- [LeetCode每日一题]153.寻找旋转排序数组中的最小值
[LeetCode每日一题]153.寻找旋转排序数组中的最小值 问题 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组 nums = [0,1, ...
- PowerDesigner16安装和使用
安装 安装参考链接:PowerDesigner安装教程 因为这个博主已经操作的很详细了,这边就不做过多的赘述. 使用 新建模型 选择物理模型 调出面板Palette 建表 最终的效果(一般不在数据库层 ...
- 【Tavern】1.tavern测试框架介绍
目录 1. Tavern 和 Postman 2. 安装Python 3. 安装Tavern 4. 第一个测试用例 1. Tavern 和 Postman Tavern是一个用Python实现的接口自 ...
- SQLFlow使用中的注意事项--设置篇
SQLFlow 是用于追溯数据血缘关系的工具,它自诞生以来以帮助成千上万的工程师即用户解决了困扰许久的数据血缘梳理工作. 数据库中视图(View)的数据来自表(Table)或其他视图,视图中字段(Co ...
- QFNU 10-30 training
7-9 特立独行的幸福 题意:见PTA 思路:其实就是遍历进行查找,利用递归函数,为了解决是特立独行,还要用一个全局数组进行存储所有满足条件的数进行去重标记,最后在输出的时候进行判断是否是只读取过一次 ...
- Java_封装
分类(分层)思想 dao层(数据访问层):对数据进行管理的操作(增.删.改.查). 数据库.数组.集合 service层(业务层): 具体做一些业务操作 controller(控制层): 用来接收用户 ...