指针数组和数组的指针,指的是两个不同的东西。

指针数组是有指针组成的数组,数组的指针是一个数组的指针。

 

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. const MAX = 3
  6.  
  7. func main() {
  8. a, b, c := 100, 2, 3
  9. arr := [3]int{a, b, c} // 定义数组,golang中默认是值拷贝
  10.  
  11. // 定义数组指针
  12. var ptrArr *[3]int
  13. ptrArr = &arr
  14. arr[1] = 200
  15. fmt.Println(b)
  16. fmt.Println(arr[1])
  17. fmt.Println((*ptrArr)[1]) // 可以简单写为:ptrArr[1]
  18.  
  19. arr[1] = 2 // 修改普通数组中的值
  20. // 定义指针数组
  21. var ptrArr2 [3]*int
  22. ptrArr2 = [3]*int{&a, &b, &c}
  23. //arr[1] = 200
  24. *ptrArr2[1] = 200
  25. fmt.Println(b)
  26. fmt.Println(arr[1])
  27. fmt.Println(*ptrArr2[1])
  28. }
  29.  

  for range遍历:使用index,value接收range返回值会发生一次数据拷贝

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. var arr1 = [4]int{11, 22, 33, 44}
  7. fmt.Printf("%T,%v\n", &arr1, &arr1) // 数组指针
  8.  
  9. var arr2 [4]*int
  10. fmt.Printf("%T,%v\n", arr2, arr2) // 指针数组
  11.  
  12. // 将数组中每个元素的地址 赋值给指针数组中的每个元素三种方法,两种正确,一种错误
  13. // 第二种方法错误的原因是:使用index,value接收range返回值会发生一次数据拷贝
  14. // 方法一:正确
  15. //for i := 0; i < len(arr1); i++ {
  16. // arr2[i] = &arr1[i]
  17. //}
  18. /*
  19. 方法二:错误
  20. 注意这样写是不对的,因为range arr1后,v的内存地址都是一致的, 都是数组中最后一个元素的内存地址
  21. for index, value := range arr1 {
  22. arr2[index] = &value
  23. }
  24. 原因:使用index,value接收range返回值会发生一次数据拷贝
  25. */
  26. // 方法三:正确
  27. for index, _ := range arr1 {
  28. arr2[index] = &arr1[index]
  29. }
  30. fmt.Printf("%T,%v\n", arr2, arr2) // 指针数组
  31.  
  32. // 根据指针数组元素的地址获取该地址的真实值
  33. for _, v := range arr2 {
  34. fmt.Println(*v)
  35. }
  36. }

  

golang中数组指针与指针数组的区别实现的更多相关文章

  1. golang中 return如果返回指针比大型struct性能高

    type tt struct{ aa int bb int cc int str string } func func_rstruct () tt{ t:=tt{1,2,3,"8888888 ...

  2. Golang中的Slice与数组

    1.Golang中的数组 数组是一种具有固定长度的基本数据结构,在golang中与C语言一样数组一旦创建了它的长度就不允许改变,数组的空余位置用0填补,不允许数组越界. 数组的一些基本操作: 1.创建 ...

  3. 在Golang中使用C语言代码实例

    转自:http://www.jb51.net/article/56720.htm cgo 使得在 Golang 中可以使用 C 代码. Hello World 为了有一个较为直观的了解,我们来看一个简 ...

  4. golang中数组指针和指针数组的区别

    func test(){ x,y := 1, 2 var arr = [...]int{5:2} //数组指针 var pf *[6]int = &arr //指针数组 pfArr := [. ...

  5. golang中数组指针和指针数组当做函数参数如何修改数组中的值

    先理解:数组指针它的类型时指针,指针数组它的类型时数组 1. 数组指针当做函数的参数 package main import "fmt" func changeData(dataA ...

  6. c++中的指针之指针在数组

    使用一维指针数组输出一维数组中的数 int array[]={1,2,3,4,5,6};        int *p; p=array;        for(int i=0;i<6;i++){ ...

  7. C/C++中数组转换成指针的情况

    数组转换成指针:在大多数用到数组的表达式中,数组自动转换成指向数组首元素的指针.比如: int ia[10]; int *p = ia; //ia转换成指向数组首元素的指针 以下情况上述转换不会发生: ...

  8. PHP中使用数组指针函数操作数组示例

    数组的内部指针是数组内部的组织机制,指向一个数组中的某个元素.默认是指向数组中第一个元素通过移动或改变指针的位置,可以访问数组中的任意元素.对于数组指针的控制PHP提供了以下几个内建函数可以利用. ★ ...

  9. C语言中字符数组和字符串指针分析

    这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...

随机推荐

  1. MyBatis学习(三)MyBatis基于动态代理方式的增删改查

    1.前言 上一期讲到MyBatis-Statement版本的增删改查.可以发现.这种代码写下来冗余的地方特别多.写一套没啥.如果涉及到多表多查询的时候就容易出现问题.故.官方推荐了一种方法.即MyBa ...

  2. 为什么加密后的数据往往都是base64输出而不是hex16进制输出

    通常加密后的数据都是字节数组,比如流行的aes128对称加密,还有Rsa非对称加密,加密后得到了一个字节数组,这个字节数组存在内存中,往往我们需要输出得到我们人眼能看到的字符. 加密aes(xxx) ...

  3. 第四十九个知识点:描述在IPsec和TLS后的基本想法

    第四十九个知识点:描述在IPsec和TLS后的基本想法 网络安全协议(Internet Protocol Security,IPsec)和安全传输层协议(Transport Layer Securit ...

  4. TriggerBN ++

    目录 motivation settings results motivation 用两个BN(一个用于干净样本, 一个用于对抗样本), 结果当使用\(\mathrm{BN}_{nat}\)的时候, ...

  5. MySQL高级查询与编程笔记 • 【第1章 数据库设计原理与实战】

    全部章节   >>>> 本章目录 1.1 数据需求分析 1.1.1 数据需求分析的定义 1.1.2 数据需求分析的步骤和方法 1.1.3 数据流程图 1.1.4 数据字典 1. ...

  6. Unity——ShaderLab实现玻璃和镜子效果

    在这一篇中会实现会介绍折射和反射,以及菲尼尔反射:并且实现镜子和玻璃效果: 这里和之前不同的地方在于取样的是一张CubeMap: demo里的cubemap使用的一样,相机所在位置拍出来的周围环境图: ...

  7. 乌龟NOI

    题目描述 一只乌龟由于智商低下,它只会向左或向右走,不过它会遵循主人小h的指令:F(向前走一步),T(掉头). 现在小h给出一串指令,由于小h有高超的计算能力,他可以马上知道乌龟最后走到哪里.为了难倒 ...

  8. MySQL存储过程入门基础

    创建存储过程无参语法: delimiter // create procedure 函数名() begin 业务逻辑 end // call 函数名() 通过函数名调用存储过程 创建存储过程有参与法: ...

  9. Selenium_模拟键盘和鼠标操作(9)

    模拟键盘键盘和鼠标操作主要使用到selenium的keys包,源码如下 class Keys(object): """ Set of special keys codes ...

  10. [ bootstrap ] 实现卡片里面包含图片、内容、操作按钮,形成左中右的布局

    描述: 如图 实现: <div class="card border-0 mb-3 mt-3"> <!-- 列表头部 --> <div class=& ...