### 声明指针
>var 变量名 *int
```
package main
import "fmt"
func main() {
var p *int
fmt.Println(p)
// <nil>
// 由于指针未指向任何地址,故打印<nil>
}
```
一般情况下,指针的变量类型为*int,变量名为p (point)或者 ptr
### 获取变量地址
> **使用操作符 "&" 获取变量地址,取得地址的值赋给指针变量**
```
package main
import "fmt"
func main() {
num := 1
var p *int
p = &num
fmt.Println("num变量的地址为:", p, &num)
// num变量的地址为: 0xc000014088 0xc000014088
fmt.Println("指针变量p的地址为:", &p)
// 指针变量p的地址为: 0xc000006028
}
```
### 获取指针指向的内容
> **使用操作符"*",获取指针所指向地址值的内容**
```
package main
import "fmt"
func main() {
num := 1
var p *int
p = &num
fmt.Println("num变量的地址为:", p, &num)
// num变量的地址为: 0xc000014088 0xc000014088
fmt.Println("指针变量p的地址为:", &p)
// 指针变量p的地址为: 0xc000006028
fmt.Println("指针变量p所指向的内容:", *p)
// 指针变量p所指向的内容: 1
}
```
如果指针未指向任何地址,输出地址内容就会报错
### 使用指针修改值
> ***变量名 = 修改值**
```
package main
import "fmt"
func main() {
num := new(int)
var p *int
p = &num
fmt.Println("num变量的地址为:", p, &num)
// num变量的地址为: 0xc000014088 0xc000014088
fmt.Println("指针变量p的地址为:", &p)
// 指针p的地址为: 0xc000006028
fmt.Println("指针变量p所指向的内容:", *p)
// 指针变量p所指向的内容: 1
*p = 10
fmt.Println("指针变量p所指向的内容:", *p, num)
// 指针变量p所指向的内容: 10 10
}
```
```
package main
import "fmt"
func main() {
var p *int
p = new(int)
fmt.Println(p, *p)
// 0xc000014088 0
*p = 10
fmt.Println(p, *p)
// 0xc000014088 10
}
```
- 安装开发环境
- 安装开发环境
- 安装详细教程
- 引入包
- Go语言基础
- 基本变量与数据类型
- 变量
- 数据类型
- 指针
- 字符串
- 代码总结
- 常量与运算符
- 常量
- 运算符
- 流程控制
- if判断
- for循环
- switch分支
- goto跳转
- 斐波那契数列
- Go语言内置容器
- 数组
- 切片
- 映射
- 函数
- 函数(上)
- 函数(中)
- 函数(下)
- 小节
- 包管理
- 结构体
- 结构体(上)
- 结构体(中)
- 结构体(下)
- 小节
- 错误处理
- 错误处理
- 宕机
- 错误应用
- 小节
- 文件操作
- 获取目录
- 创建和删除目录
- 文件基本操作(上)
- 文件基本操作(中)
- 文件基本操作(下)
- 处理JSON文件
- 接口与类型
- 接口的创建与实现
- 接口赋值
- 接口嵌入
- 空接口
- 类型断言(1)
- 类型断言(2)
- 小节
- 并发与通道
- goroutine协程
- runtime包
- 通道channel
- 单向通道channel
- select
- 线程同步
- 多线程的深入学习
- http编程
- http简介
- Client和Request
- get请求
- post请求
- 模块函数方法
- 模块
- fmt库,模块
- 项目练习
- 爬虫:高三网
- 爬虫:快代理
- 爬虫:快代理2
- 多线程:通道思路
- 多线程爬虫:快代理