Go语言第五课 指针

目前位置,我所见过的语言里面有指针的就两个:Go和C/C++

两种指针还是有诸多类似的地方,下面我们将这两种指针对比着来学习

内存地址

· Go:不是每个值都有内存地址,但是每一个变量都有其内存地址,允许被&操作。聚合类型的每个成员(结构体的每个字段、数组的每个元素)也有内存地址,允许被&操作。

· C/C++:只要是值就有内存地址,只是区分堆地址、栈地址而已。所有值都可以被&操作。

关于指针的表示

· Go语言

var x int //声明变量

&x //取地址

var p *int //定义指针

p = &x //指针指向变量

*p = 2 //间访变量

· C/C++

int x; //声明变量

&x; //取地址

int* p; //定义指针

p = &x; //指针指向变量

*p = 2; //间访变量

看起来的确很像!

临时变量的指针

在C/C++里面临时变量一般分配在栈内存上,离开作用域的时候被析构函数回收。所以在一般不会在临时变量的作用域之外使用指向零时变量的指针。

但是在Go里面变量又被称为可寻址的值,即使是临时变量也可以接受&(取地址)操作,并且这些指针可以在变量作用域之外使用。

new关键字

在C++里面是关键字,在Go里面是一个预定义函数

· C++

C++里面的new关键字调用的是构造函数,构造出来的值存放在堆区,返回的是指向这个值的指针

int* a = new int(0);

· Go

创建一个匿名变量并返回其指针

var p *int = new(int)


猜你喜欢

转载自blog.csdn.net/yongyu_it/article/details/80664688
今日推荐