go语言基础之复合类型

1、分类

类型

名称

长度

默认值

说明

pointer

指针

 

nil

 

array

数组

 

0

 

slice

切片

 

nil

引⽤类型

map

字典

 

nil

引⽤类型

struct

结构体

 

 

 

2、指针

         指针是一个代表着某个内存地址的值。这个内存地址往往是在内存中存储的另一个变量的值的起始位置。Go语言对指针的支持介于Java语言和C/C++语言之间,它既没有想Java语言那样取消了代码对指针的直接操作的能力,也避免了C/C++语言中由于对指针的滥用而造成的安全和可靠性问题。

 

Go语言虽然保留了指针,但与其它编程语言不同的是:

  1. 默认值 nil,没有 NULL 常量
  2. 操作符 "&" 取变量地址, "*" 通过指针访问目标对象
  3. 不支持指针运算,不支持 "->" 运算符,直接⽤ "." 访问目标成员

示例:

package main //必须有个main包

import "fmt"

func main() {
	var a int = 10
	//每个变量有2层含义:变量的内存,变量的地址
	fmt.Printf("a = %d
", a) //变量的内存
	fmt.Printf("&a = %v
", &a)

	//保存某个变量的地址,需要指针类型   *int 保存int的地址, **int 保存 *int 地址
	//声明(定义), 定义只是特殊的声明
	//定义一个变量p, 类型为*int
	var p *int
	p = &a //指针变量指向谁,就把谁的地址赋值给指针变量 
	fmt.Printf("p = %v, &a = %v
", p, &a)  //%v 自动配置类型

	*p = 666 //*p操作的不是p的内存,是p所指向的内存(就是a)
	fmt.Printf("*p = %v, a = %v
", *p, a)

}

#执行结果:

a = 10
&a = 0xc00000c198
p = 0xc00000c198, &a = 0xc00000c198
*p = 666, a = 666

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/nulige/p/10237345.html