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

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

 

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. Elasticsearch 和 solr 的区别

    背景:它们都是基于Luence搜索服务器基础之上开发的一款优秀高性能的企业级搜索服务器.也都是基于分词技术构建的倒排索引的方式进行查询 开发语言:java 诞生时间: solr  :2004年 es ...

  2. BERT生成能力改进:分离对话生成和对话理解

    NLP论文解读 原创•作者 | 吴雪梦Shinemon 研究方向 | 计算机视觉 导读说明: NLP任务大致可以分为NLU(自然语言理解)和NLG(自然语言生成)两种,NLU负责根据上下文去理解当前用 ...

  3. 【LeetCode】1029. Two City Scheduling 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 小根堆 排序 日期 题目地址:https://lee ...

  4. 【LeetCode】726. Number of Atoms 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/number-o ...

  5. 【LeetCode】688. Knight Probability in Chessboard 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/knight-pr ...

  6. idea使用教程-常用快捷键

    [1]创建内容:alt+insert [2]main方法:psvm [3]输出语句:sout [4]复制行:ctrl+d [5]删除行:ctrl+y [6]代码向上/下移动:Ctrl + Shift ...

  7. Codeforces 931C:Laboratory Work(构造)

    C. Laboratory Work time limit per test : 1 second memory limit per test : 256 megabytes input : stan ...

  8. [JNI开发]使用javah命令生成.h的头文件

    第一步:进入对应的.java目录 javac xxx.java 生成对应的xxx.class文件 第二步:退回到/java目录 javah -classpath . -jni 包名.类名

  9. RTD2172替代方案|TYPEC转HDMI4K@60HZ拓展坞|CS5265替代RTD2172

    瑞昱RTD2172是TYPEC转HDMI4K60HZ音视频数据转换器芯片.CS5265可以替代兼容RTD2172,除了实现同等的转换功能外且整体方案成本和性价比方面比RTD2172要高,且外围器件较少 ...

  10. PHP 开启 Opcache 功能提升程序处理效率

    简介 Opcache 的前生是 Optimizer+ ,它是 Zend 开发的 PHP 优化加速组件.Optimizer+ 将 PHP 代码预编译生成的脚本文件 Opcode 缓存在共享内存中供以后反 ...