zouLearn

导航

统计

Go语言指针

Go语言指针

基本数据类型:变量存的是值,也叫值类型

Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。

取值符的操作(&)

package main
import "fmt"
/* 指针的使用 */
func main() {
var a int = 10
fmt.Printf("a of address:%v\n", &a)
fmt.Printf("a of address:%d\n", &a)
fmt.Printf("a of address:%b\n", &a)
fmt.Printf("a of address:%o\n", &a)
fmt.Printf("a of address:%x\n", &a)
}

指针的基本用法

package main
import "fmt"
func main() {
var a int = 9
var point * int //定义一个变量
point = &a //将指针指向a的地址变量
fmt.Printf("point指向的地址:%v\n", point)
fmt.Printf("point指向的地址的在值:%v\n", * point)
fmt.Printf("a:的值:%d\n", a)
}

Go 空指针

当一个指针被定义后没有分配到任何变量时,它的值为 nil。

nil 指针也称为空指针。

nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。

一个指针变量通常缩写为 ptr。

package main
import "fmt"
func main() {
var pointNull * int; //定义一个空指针
fmt.Printf("pointNull的值:%v\n", pointNull)
fmt.Printf("pointNull的值:%d\n", pointNull)
}

Go指针数组

package main
import "fmt"
func main() {
var arrayPoint = [] int{1,2,3,4,5,8,7} //定义一个数组
var StringArrays = [] string{"zhangsan","lisi","liuliu","qiqi"} //定义一个字符数组
var pointInt *[] int = &arrayPoint; //将整形指针指向第一个数组
var pointString *[] string = &StringArrays //将字符指针指向第一个字符数组
fmt.Printf("第一个数组的首地址的值:%v\n", *pointInt)
fmt.Printf("第一个数组的首地址:%v\n", &pointInt)
fmt.Printf("第一个字符的首地址的值:%v\n", *pointString)
fmt.Printf("第一个字符的首地址:%v\n", &pointString)
ForEach(*pointInt)
ForEach(*pointString)
}
/* 遍历的泛型函数 */
func ForEach[T comparable] (Array[] T)(){
for key, value := range Array {
fmt.Printf("第%d个值:%v\n", key,value)
}
}

Go 语言指针作为函数参数

package main
import "fmt"
/* 将指针作为函数的参数 */
func main() {
a:=1
b:=2
fmt.Printf("a:%v,b:%v\n", a,b)
Swith(&a,&b)
fmt.Printf("a:%v,b:%v\n", a,b)
}
/** 引用传递的实现 **/
func Swith[T comparable ](a * T,b * T)() {
var temp T;
temp = *a
*a = *b
*b = temp
}

image-20221004171511035

Go语言中双重指针

定义一个双重指针

package main
import "fmt"
/* 双重指针 */
func main() {
var DoublePoint **int //定义一个双重指针
var SingerPoint *int
var Value int = 500
SingerPoint = &Value //将value赋值给指针
DoublePoint = &SingerPoint //将单重指针指向双重指针
fmt.Printf("Value的地址:%v\n", &Value)
fmt.Printf("Value的值:%v\n", Value)
fmt.Printf("************************************\n")
fmt.Printf("SingerPoint的地址:%v\n", &SingerPoint)
fmt.Printf("SingerPoint的地址:%v\n", SingerPoint)
fmt.Printf("SingerPoint的值:%v\n", *SingerPoint)
fmt.Printf("************************************\n")
fmt.Printf("DoublePoint 的地址:%v\n", &DoublePoint )
fmt.Printf("DoublePoint 的单重指针值:%v\n", *DoublePoint )
fmt.Printf("DoublePoint 的值:%v\n", **DoublePoint )
}

posted on   zou_IT  阅读(31)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示