首先我们要明确:
(1)基本数据类型:变量存的就是值,也叫值类型;

(2)获取变量的地址,用&,例如var num int,获取num的地址:#

(3)指针类型:变量存的是一个地址,这个地址指向的空间存的才是值,例如var ptr *int = #

(4)获取指针类型所指向的值,使用*,例如var *ptr int,使用*ptr获取ptr指向的值;

package main

import (
"fmt"
) func main() {
var num int = 1
var ptr *int = &num
fmt.Println("num的地址是:", &num)
fmt.Println("ptr的值是:", ptr)
fmt.Println("ptr的地址是:", &ptr)
}

ptr是一个指针,它的值是num的地址,同时,它自己也会有一个地址。我们可以通过地址定位到变量并改变变量的值:

package main

import (
"fmt"
) func main() {
var num int = 1
var ptr *int
fmt.Println("num的值是:", num)
ptr = &num
*ptr = 10
fmt.Println("num的值是:", num)
}

我们还可以通过切换指针的值来改变不同变量的值:注意指针类型与变量类型之间要匹配。

package main

import (
"fmt"
) func main() {
var num1 int = 1
var num2 int = 2
var ptr *int
fmt.Println("num1的值是:", num1)
fmt.Println("num2的值是:", num2)
ptr = &num1
*ptr = 10
ptr = &num2
*ptr = 20
fmt.Println("num1的值是:", num1)
fmt.Println("num2的值是:", num2)
}

指针使用细节:
(1)值类型,都有对应的指针,形式为*数据类型,比如int对应的指针就是*int,float32对应的指针就是*float;

(2)值类型包括:基本数据类型int系列、float系列、bool、string、数组和结构体;

值类型和引用类型:

(1)值类型包括:基本数据类型int系列、float系列、bool、string、数组和结构体;

(2)引用类型:指针、slice切片、map、管道channel、interface等;

值类型和引用类型的区别:
(1)值类型,变量直接存储,内存通常在中分配;

(2)引用类型:变量存储的是一个地址,这个地址对应的空间才是真正存储的数据值,内存通常在堆上分配,当没有任何变量引用这个地址时,改地址对应的数据空间就是一个垃圾,由GC来回收;

最新文章

  1. Yii2 rules 添加时间比较功能
  2. spoj1811 Longest Common Substring
  3. jQuery 基础(3) -- jQuery 事件
  4. [HDOJ5726]GCD(RMQ,二分)
  5. 初学java之try-catch-finally语句的实例
  6. 【BZOJ】【2631】Tree
  7. dbcp 是什么
  8. jquery validation ajax 验证
  9. 海量jQuery插件
  10. WKWebView-b
  11. Google Picasa
  12. HDU5301
  13. MicrosoftSQLServer中的锁模式
  14. WifiDog系统
  15. mac版gif格式录屏工具下载和使用
  16. 201521123048 《Java程序设计》第13周学习总结
  17. Java垃圾回收机制[转]
  18. Codechef July Challenge 2018 : Subway Ride
  19. Isight 命令行运行任务
  20. ant_<target>标签含义与使用

热门文章

  1. 彻底理解CORS跨域原理
  2. Java 学习笔记之 父子类Synchronized
  3. spring和springmvc的基础知识点
  4. mysql互为主从(双主)配置
  5. 【Java必修课】一图说尽排序,一文细说Sorting(Array、List、Stream的排序)
  6. 程序员需要了解的硬核知识之CPU
  7. mvc请求管道(一)
  8. PHP array_search
  9. hadoop-3.1.2启动httpfs
  10. 扩展阿里p3c实现自定义代码规范检查