欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > GO语言指针有那些限制

GO语言指针有那些限制

2025/4/18 20:52:22 来源:https://blog.csdn.net/lisus2007/article/details/142980912  浏览:    关键词:GO语言指针有那些限制

GO语言指针有那些限制

GO 语言的指针
一个指针变量本身存会计的只是一个内存地址
一个内存地邗在32位系统上占4个字节,在64位系统上占8个字节
内存地址一般用整数的16进制来表示

当一个变量声明的时候,GO运行时将此变量开辟一段内存,此内存的起始地址即为此变量的地址

	func main(){x:=new(int) //声明指针y:=x//将x的地址值赋值给ytmp:=5x=&tmp //将tmp的地址值赋值给xfmt.Println("x=",*,"y=",y,*y)}

在这里插入图片描述
多维指针
在这里插入图片描述
GO语言中哪些值不可被寻址
映射的元素、字符串的字节元素、常量包级别的函数以及用作函数值的方法等

如何获取一个指针值
内置函数new 、直接使用&操作符

func main()
{a = new([3]int)fmt.Println(a)b:=3fmt.Println(&b)
}

GO语言指针的限制
1.GO提针不支持直接进行算术运算

func main()
{i:=int64(5)p:=&ip++ //nvalid operation: p++ (non-numeric type *int64)atomic.AddInt64(p,1)}

2.一个指针类型的值不能被随意转 换为另一个指针类型
指针类型转换的条件
底层类型一致且有一个是无名类型
都是无名类型,且他们的基为类型的底层一致

func main() {type Myint int32type P1 *int32type P2 *Myintvar x1 P1var x2 *int32x1 = x2 //隐式转换//fmt.Println(x1, x2)x2 = x1 //隐式转换var x3 *Myintx4 := (*int32)(x3) //显示转换x5 := (*Myint)(x2) //*Myint显示转换到*int32fmt.Println(x4, x5)//var x6 P2//x6 = x1                         //P1不能直接隐式转换到P2,编译不通过//x6 = (*Myint)(x1)               //也不能直接显示转换,编译不通过//x6 = P2((*Myint)((*int32)(x1))) //P1经过3层显示转换到P2//fmt.Println(x6)//
}

3.一个指针不能随意跟其他指针类型的值进行比较
指针比较需要满足的条件
这两个指针类型相同
这两个指针之前可以隐式转换

	func main() {type Myint int32type P1 *int32type P2 *Myintvar x1 P1var x2 *int32x1 = x2 //隐式转换//fmt.Println(x1, x2)x2 = x1 //隐式转换var x3 *Myintx4 := (*int32)(x3) //显示转换x5 := (*Myint)(x2) //*Myint显示转换到*int32fmt.Println(x4, x5)//var x6 P2//x6 = x1                         //P1不能直接隐式转换到P2,编译不通过//x6 = (*Myint)(x1)               //也不能直接显示转换,编译不通过//x6 = P2((*Myint)((*int32)(x1))) //P1经过3层显示转换到P2//fmt.Println(x6)////fmt.Println(x1 == x2) // 可以比较//fmt.Println(x2 == x3) //不能比较//fmt.Println(x1 == x6) //不能比较//fmt.Println(x2 == x6) //不能比较fmt.Println("unsafe.Pointer:", unsafe.Pointer(x2) == unsafe.Pointer(x3)) //可以比较
}

4.一个指针不能随意被赋值给其它任意类型的指针值
上术限制可以能过unsafe标准包中的非类型安全指针(unsafe.Pointer)来打破

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com