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

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

 

package main

import "fmt"

const MAX = 3

func main() {
a, b, c := 100, 2, 3
arr := [3]int{a, b, c} // 定义数组,golang中默认是值拷贝 // 定义数组指针
var ptrArr *[3]int
ptrArr = &arr
arr[1] = 200
fmt.Println(b)
fmt.Println(arr[1])
fmt.Println((*ptrArr)[1]) // 可以简单写为:ptrArr[1] arr[1] = 2 // 修改普通数组中的值
// 定义指针数组
var ptrArr2 [3]*int
ptrArr2 = [3]*int{&a, &b, &c}
//arr[1] = 200
*ptrArr2[1] = 200
fmt.Println(b)
fmt.Println(arr[1])
fmt.Println(*ptrArr2[1])
}
 

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

package main

import "fmt"

func main() {
var arr1 = [4]int{11, 22, 33, 44}
fmt.Printf("%T,%v\n", &arr1, &arr1) // 数组指针 var arr2 [4]*int
fmt.Printf("%T,%v\n", arr2, arr2) // 指针数组 // 将数组中每个元素的地址 赋值给指针数组中的每个元素三种方法,两种正确,一种错误
// 第二种方法错误的原因是:使用index,value接收range返回值会发生一次数据拷贝
// 方法一:正确
//for i := 0; i < len(arr1); i++ {
// arr2[i] = &arr1[i]
//}
/*
方法二:错误
注意这样写是不对的,因为range arr1后,v的内存地址都是一致的, 都是数组中最后一个元素的内存地址
for index, value := range arr1 {
arr2[index] = &value
}
原因:使用index,value接收range返回值会发生一次数据拷贝
*/
// 方法三:正确
for index, _ := range arr1 {
arr2[index] = &arr1[index]
}
fmt.Printf("%T,%v\n", arr2, arr2) // 指针数组 // 根据指针数组元素的地址获取该地址的真实值
for _, v := range arr2 {
fmt.Println(*v)
}
}

  

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. 将本地的react项目代码打包到服务器

    打包过程 连接服务器 ssh root@xx.xx.xx.xx(服务器IP) 定位到当前项目目录 cd /path/projectName 更新代码到服务器 git pull 执行打包命令(这里我创建 ...

  2. AcWing3544. 寻找变化前的01序列

    题目描述 给你一个 01 序列,HDLC 协议处理的话,如果出现连续的 5 个 1 会补 1 个 0. 例如 1111110,会变成 11111010. 现在给你一个经过 HDLC 处理后的 01 序 ...

  3. JAVA获取当前请求的URL地址,包含请求链接中的参数

    /** * 获得当前访问的URL路径 * @param request * @return */ public static String getLocation(HttpServletRequest ...

  4. codeforce 595B-Pasha and Phone(数学)

    今天补题,昨天是我太猖狂了,在机房吹牛,然后说着说着忘了时间,后来楼长来了,我们走了,CF没打成. 不扯了,下面说题: 题目的意思是给你n和k, n代表最后得出的号码有n为,然后k能被n整除,就是把n ...

  5. ZOJ 3960:What Kind of Friends Are You?

    What Kind of Friends Are You? Time Limit: 1 Second Memory Limit: 65536 KB Japari Park is a large zoo ...

  6. JSP中的九大内置对象

    JSP九大内置对象 pageContext 存东西 Request 存东西 Response Session 存东西 Application(servletContext) 存东西 config(se ...

  7. Java Swing设计简单商品信息管理系统(java swing+mysql+eclipse)

    一.概述 为了管理好商店库存信息,提升店铺管理工作效率,结合实际工作需要,设计和开发本系统,主要用于商店商品信息维护出入库等.包含商品库存信息查看.商品信息修改,新增商品信息,删除信息等功能. 二.功 ...

  8. Roslyn+T4+EnvDTE项目完全自动化(3) ——生成c++代码

    C++语法复杂,写一个示例通过T4可生成c++代码 需求:数据库,生成c++增,删,改,查代码 数据生成c++类,包含所有字段 自动识别数据的主键Key 查询生成赋值类字段,类型转换 通过类自动生成s ...

  9. Snack3 3.2 发布,轻量的Json+Jsonpath框架

    Snack3 是一个轻量的 JSON + Jsonpath 框架. 借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计.其下一切数据都以ONode表 ...

  10. Python_闭包

    闭包并不只是一个python中的概念,在函数式编程语言中应用较为广泛.理解python中的闭包一方面是能够正确的使用闭包,另一方面可以好好体会和思考闭包的设计思想. 1.概念介绍 首先看一下维基上对闭 ...