golang中数组指针与指针数组的区别实现
指针数组和数组的指针,指的是两个不同的东西。
指针数组是有指针组成的数组,数组的指针是一个数组的指针。
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中数组指针与指针数组的区别实现的更多相关文章
- golang中 return如果返回指针比大型struct性能高
type tt struct{ aa int bb int cc int str string } func func_rstruct () tt{ t:=tt{1,2,3,"8888888 ...
- Golang中的Slice与数组
1.Golang中的数组 数组是一种具有固定长度的基本数据结构,在golang中与C语言一样数组一旦创建了它的长度就不允许改变,数组的空余位置用0填补,不允许数组越界. 数组的一些基本操作: 1.创建 ...
- 在Golang中使用C语言代码实例
转自:http://www.jb51.net/article/56720.htm cgo 使得在 Golang 中可以使用 C 代码. Hello World 为了有一个较为直观的了解,我们来看一个简 ...
- golang中数组指针和指针数组的区别
func test(){ x,y := 1, 2 var arr = [...]int{5:2} //数组指针 var pf *[6]int = &arr //指针数组 pfArr := [. ...
- golang中数组指针和指针数组当做函数参数如何修改数组中的值
先理解:数组指针它的类型时指针,指针数组它的类型时数组 1. 数组指针当做函数的参数 package main import "fmt" func changeData(dataA ...
- c++中的指针之指针在数组
使用一维指针数组输出一维数组中的数 int array[]={1,2,3,4,5,6}; int *p; p=array; for(int i=0;i<6;i++){ ...
- C/C++中数组转换成指针的情况
数组转换成指针:在大多数用到数组的表达式中,数组自动转换成指向数组首元素的指针.比如: int ia[10]; int *p = ia; //ia转换成指向数组首元素的指针 以下情况上述转换不会发生: ...
- PHP中使用数组指针函数操作数组示例
数组的内部指针是数组内部的组织机制,指向一个数组中的某个元素.默认是指向数组中第一个元素通过移动或改变指针的位置,可以访问数组中的任意元素.对于数组指针的控制PHP提供了以下几个内建函数可以利用. ★ ...
- C语言中字符数组和字符串指针分析
这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...
随机推荐
- Elasticsearch 和 solr 的区别
背景:它们都是基于Luence搜索服务器基础之上开发的一款优秀高性能的企业级搜索服务器.也都是基于分词技术构建的倒排索引的方式进行查询 开发语言:java 诞生时间: solr :2004年 es ...
- BERT生成能力改进:分离对话生成和对话理解
NLP论文解读 原创•作者 | 吴雪梦Shinemon 研究方向 | 计算机视觉 导读说明: NLP任务大致可以分为NLU(自然语言理解)和NLG(自然语言生成)两种,NLU负责根据上下文去理解当前用 ...
- 【LeetCode】1029. Two City Scheduling 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 小根堆 排序 日期 题目地址:https://lee ...
- 【LeetCode】726. Number of Atoms 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/number-o ...
- 【LeetCode】688. Knight Probability in Chessboard 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/knight-pr ...
- idea使用教程-常用快捷键
[1]创建内容:alt+insert [2]main方法:psvm [3]输出语句:sout [4]复制行:ctrl+d [5]删除行:ctrl+y [6]代码向上/下移动:Ctrl + Shift ...
- Codeforces 931C:Laboratory Work(构造)
C. Laboratory Work time limit per test : 1 second memory limit per test : 256 megabytes input : stan ...
- [JNI开发]使用javah命令生成.h的头文件
第一步:进入对应的.java目录 javac xxx.java 生成对应的xxx.class文件 第二步:退回到/java目录 javah -classpath . -jni 包名.类名
- RTD2172替代方案|TYPEC转HDMI4K@60HZ拓展坞|CS5265替代RTD2172
瑞昱RTD2172是TYPEC转HDMI4K60HZ音视频数据转换器芯片.CS5265可以替代兼容RTD2172,除了实现同等的转换功能外且整体方案成本和性价比方面比RTD2172要高,且外围器件较少 ...
- PHP 开启 Opcache 功能提升程序处理效率
简介 Opcache 的前生是 Optimizer+ ,它是 Zend 开发的 PHP 优化加速组件.Optimizer+ 将 PHP 代码预编译生成的脚本文件 Opcode 缓存在共享内存中供以后反 ...