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,虽然网上这类的文章也有很多,还是决定自己在这 ...
随机推荐
- ACwing1015. 摘花生
题目: Hello Kitty想摘点花生送给她喜欢的米老鼠. 她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来. 地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过 ...
- Multiple(poj1465)
Multiple Time Limit: 1000MS Memory Limit: 32768K Total Submissions: 7183 Accepted: 1540 Descript ...
- 湫湫系列故事——消灭兔子(hdu4544)
湫湫系列故事--消灭兔子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- Mysql数据库体系
Mysql数据库体系如下(手绘): 描述: 1.DBMS:database system management是数据库管理软件,平时我们使用的数据库的全称,是C/S架构(client/server)工 ...
- CS5213demoboard设计电路|DMI转VGA带II2S音频输出转接线|CS5213方案
CS5213是台湾CAPSTONE瑞奇达推出的一款HDMI(高清多媒体接口)到VGA转换芯片. CS5213设计HDMI转VGA带II2S转接线产品特性: ◇将完整的HDMI信号转换为VGA输出◇支持 ...
- C# 执行Javascript脚本
前一阵子使用C#编写SCXML状态机,需要解析EMCScript表达式,使用了Jint库(https://github.com/sebastienros/jint/),当时感觉与C#之间的数据转换不是 ...
- xpath如何使用正则、xpath定位svg标签、xpath常用集合
自己用到的xpath都收集下咯!!! 持续更新本页面 xpath查找svg图标 xpath('//*[local-name() = "svg" and @class="_ ...
- css 基础 字体和文本样式
字体样式处理font-size:30px:// 设置字体大小 font-weight:700://设置粗体 font-sytle:italic; //设置文字斜体 font-family: 斜体,宋体 ...
- 乌龟NOI
题目描述 一只乌龟由于智商低下,它只会向左或向右走,不过它会遵循主人小h的指令:F(向前走一步),T(掉头). 现在小h给出一串指令,由于小h有高超的计算能力,他可以马上知道乌龟最后走到哪里.为了难倒 ...
- python 安装包时提示“unsupport command install”
为什么提示找不到? 电脑安装了LoadRunnder,LoadRunner也有pip.exe,导致找不到python的exe 解决方法: 切换到python pip的路径进行安装,进到这个路径下,进行 ...