Golang开发--指针的使用

一个指针变量指向了一个值的内存地址,用它得到的内容和取地址符得到的内容相同。

指针使用:

1.定义指针变量。
2.为指针变量赋值。
3.访问指针变量中指向地址的值。

在指针类型前面加上 * 号来获取指针所指向的内容。

package main
import  "fmt"

func main(){
	var quanju =10 
	fmt.Println("quanju Address:",&quanju)
	var p *int
	p=&quanju
	fmt.Println(*p)
	fmt.Println(p)
}

运行结果为:

quanju Address: 0xc000012088
10
0xc000012088

如果只定义了指针并没有赋值,则它为空指针,它的值为nil

package main
import  "fmt"

func main(){
	var p *int
	fmt.Println(p)
}
//

空指针并没有指向内存地址,因此*p也无法获得值

指向数组的指针
如果需要保存数组元素,则需要用到指针数组,即数组中的每个元素都是一个指针变量,指向一个值的内存地址
声明:

var pname [size] *xtype

package main
import  "fmt"
func main(){
	var p [5] *int
	var i int
	for i=0;i<5;i++{
		p[i]=&i
	}
	for i=0;i<5;i++{
		fmt.Println(*p[i])
	}
}

运行结果为:

0
1
2
3
4

指向指针的指针

如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量

当定义一个指向指针的指针变量时,第一个指针存放第二个指针的地址,第二个指针存放变量的地址

var pname ** xtype

package main
import  "fmt"
func main(){
	var x =10
	var p1 *int
	var p2 **int
	p1=&x
	p2=&p1
	fmt.Println("x=",x)
	fmt.Println("x=",*p1)
		fmt.Println("x=",**p2)
	fmt.Println("address of x=",&x)
	fmt.Println("address of x=",p1)
	//fmt.Println("address of x=",&&p2)
}

运行结果为:

x= 10
x= 10
x= 10
address of x= 0xc0000ac058
address of x= 0xc0000ac058

上面注释的语句,两次取地址会报错:

syntax error: unexpected &&, expecting expression

指针作为函数参数

在函数定义的参数上设置为指针类型,调用函数时用取地址符调用

package main
import  "fmt"
func main(){
	var x,y =10,20
	fmt.Printf("x=%d,y=%d\n",x,y)
	swap(&x,&y)
	fmt.Printf("x=%d,y=%d\n",x,y)
}
func swap(x *int,y *int){
	*x,*y=*y,*x
}

运行结果为:

x=10,y=20
x=20,y=10

你可能感兴趣的:(go,golang)