golang有没有指针
这篇文章主要介绍了golang有没有指针的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇golang有没有指针文章都会有所收获,下面我们一起来看看吧。
golang有指针。Go语言为程序员提供了控制数据结构指针的能力,其对指针的支持介于Java语言和C/C++语言之间,它既没有像Java那样取消了代码对指针的直接操作的能力,也避免了C/C++中由于对指针的滥用而造成的安全和可靠性问题。指针在Go语言中可被拆分为两个核心概念:1、类型指针,允许对这个指针类型的数据进行修改;2、切片,由指向起始元素的原始指针、元素数量和容量组成。
与 Java 和 .NET 等编程语言不同,Go语言为程序员提供了控制数据结构指针的能力,但是,并不能进行指针运算。Go语言允许你控制特定集合的数据结构、分配的数量以及内存访问模式,这对于构建运行良好的系统是非常重要的。指针对于性能的影响不言而喻,如果你想要做系统编程、操作系统或者网络应用,指针更是不可或缺的一部分。
Go语言对指针的支持介于Java语言和C/C++语言之间,它既没有像Java那样取消了代码对指针的直接操作的能力,也避免了C/C++中由于对指针的滥用而造成的安全和可靠性问题。
指针(pointer)在Go语言中可以被拆分为两个核心概念:
类型指针,允许对这个指针类型的数据进行修改,传递数据可以直接使用指针,而无须拷贝数据,类型指针不能进行偏移和运算。
切片,由指向起始元素的原始指针、元素数量和容量组成。
受益于这样的约束和拆分,Go语言的指针类型变量即拥有指针高效访问的特点,又不会发生指针偏移,从而避免了非法修改关键性数据的问题。同时,垃圾回收也比较容易对不会发生偏移的指针进行检索和回收。
切片比原始指针具备更强大的特性,而且更为安全。切片在发生越界时,运行时会报出宕机,并打出堆栈,而原始指针只会崩溃。
golang中什么是指针?
指针是一个变量,其值是另一个变量的地址,即存储器位置的直接地址。类似变量或常量一样,必须要先声明一个指针,然后才能使用它来存储任何变量地址。指针变量声明的一般形式是:
这里,var-type是指针的基类型; 它必须是有效的Go数据类型,var-name是指针变量的名称。用于声明指针的星号(*)与用于乘法的星号相同。但是,在此语句中,星号(*)用于将变量指定为指针。以下是有效的指针声明: 所有指针的值的实际数据类型(无论是整数,浮点数还是其他数据类型)都是相同的,它表示内存地址的长十六进制数。不同数据类型的指针的唯一区别是指针所指向的是变量或常量的数据类型。var var-name *var-type
var ip *int /* pointer to an integer */
var fp *float32 /* pointer to a float */
如何使用指针?
有几个重要的操作,将非常频繁地使用指针来实现。
定义一个指针变量
将一个变量的地址赋值给一个指针
最后访问指针变量中可用地址的值
这是通过使用一元运算符*
来返回位于操作数指定的地址的变量的值。下面的例子使用这些操作:
当上面的代码编译和执行时,它产生结果如下: 在Go语言中的nil指针package main
import "fmt"
func main() {
var a int= 20 /* actual variable declaration */
var ip *int /* pointer variable declaration */
ip = &a /* store address of a in pointer variable*/
fmt.Printf("Address of a variable: %x\n", &a )
/* address stored in pointer variable */
fmt.Printf("Address stored in ip variable: %x\n", ip )
/* access the value using the pointer */
fmt.Printf("Value of *ip variable: %d\n", *ip )
}
Address of var variable: 10328000
Address stored in ip variable: 10328000
Value of *ip variable: 20
Go编译器为指针变量分配一个Nil
值,以防指针没有确切的地址分配。这是在变量声明的时候完成的。指定为nil
值的指针称为nil指针。
nil
指针是在几个标准库中定义的值为零的常量。参考下面的程序:
当上面的代码编译和执行时,它产生结果如下: 在大多数操作系统上,程序不允许访问地址package main
import "fmt"
func main() {
var ptr *int
fmt.Printf("The value of ptr is : %x\n", ptr )
}
The value of ptr is 0
0
处的内存,因为该内存是由操作系统保留的。 然而,存储器地址0
具有特殊意义;它表示指针不打算指向可访问的存储器位置。但是按照惯例,如果指针包含nil
(零)值,则假设它不指向任何东西。
要检查是否为nil
指针,可以使用if
语句,如下所示:
if(ptr != nil) /* succeeds if p is not nil */
if(ptr == nil) /* succeeds if p is null */
关于“golang有没有指针”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“golang有没有指针”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注蜗牛博客行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
评论