go语言学习--指针数组和数组指针

ricklz ricklz     2023-01-17     643

关键词:

数组指针(也称行指针)
定义 int (*p)[n];
()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。

如要将二维数组赋给一指针,应这样赋值:
int a[3][4];
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++;       //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]

所以数组指针也称指向一维数组的指针,亦称行指针。

指针数组
定义 int *p[n];
[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。
如要将二维数组赋给一指针数组:
int *p[3];
int a[3][4]; p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针
for(i=0;i<3;i++)
p[i]=a[i] 这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]
所以要分别赋值。

这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。
还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。
比如要表示数组中i行j列一个元素:
*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]

优先级:()>[]>*

出处:http://www.cnblogs.com/hongcha717/archive/2010/10/24/1859780.html


















go语言基础函数,数组,指针,结构体(代码片段)

...量作用域数组数组定义数组+函数+宏定义二维数组指针make和new的区别二级指针的使用空指针指针数组将指针传入函数进行值的交换结构体自定义类型和类型别名结构体初始化匿名结构体结构体的内存布局结构体内存对齐各... 查看详情

go语言|03数组指针切片用法(代码片段)

...章目录Go语言数组声明数组访问数组元素多维数组Go语言指针如何使用指针指针数组指向指针的指针指针作为函数参数Go语言切片(Slice)定义切片切片初始化len()和cap()函数切片截取append()和copy()函数Go语言数组Go语言提供了数组类型... 查看详情

go语言入门四(复合类型数组切片指针)(代码片段)

...现在学习下复合类型复合类型:把基础类型封装起来了。指针指针可是c语言中的重头戏,指针数组数组指针函数指针指针函数回调函数回调函数的数组一级指针二级指针三四五。。。。c语言指针有可以进行判断进行+-等操作go语... 查看详情

go语言,为啥range循环取的指针地址和直接用数组取的指针地址不一样,求指教

...ist[0]的地址不一样。参考技术Ago语言,为什么range循环取的指针地址和直接在线的人就是有 查看详情

7天能找到go工作吗?学学go数组和指针试试(代码片段)

学习之前对于一个Python工程师来说,数组和指针在Python中都没有明确概念,所以这部分知识点只能依赖C/C++的积累了。学习数组的时候,可以参考Python的列表进行实践。Go数组先看一下数组的定义,它是一个... 查看详情

7天能找到go工作吗?学学go数组和指针试试(代码片段)

学习之前对于一个Python工程师来说,数组和指针在Python中都没有明确概念,所以这部分知识点只能依赖C/C++的积累了。学习数组的时候,可以参考Python的列表进行实践。Go数组先看一下数组的定义,它是一个... 查看详情

go语言基础函数,数组,指针,结构体(代码片段)

...量作用域数组数组定义数组+函数+宏定义二维数组指针make和new的区别二级指针的使用空指针指针数组将指针传入函数进行值的交换结构体自定义类型和类型别名结构体初始化匿名结构体结构体的内存布局结构体内存对齐各... 查看详情

go语言学习——复习运算符数组切片指针map

如果什么都很容易,那还叫什么选择走上坡路肯定是会累的运算符算术运算符+-*/逻辑运算符&&||!位运算符<<|^&赋值运算符=+=-=...++和--是独立的语句,不属于赋值运算符比较运算符<⇐!=...数组(Array)varages[ 查看详情

go语言之指针

...当作为方法的入参传入时将复制一份数组而不是引用同一指针。数组的长度也是其类型的一部分,通过内置函数len(array)获取其长度。在开始前先了解指针与地址:Go语言中指针是很容易学习的,Go语言中使用指针可以更简单的执... 查看详情

golang数据一 (字符串数组和数组指针)

从如下几个方面介绍GO语言的数据1. 字符串2. 数组3. 切片4. 字典5. 结构字符串Go语言中的字符串是由一组不可变的字节(byte)序列组成从源码文件中看出其本身是一个复合结构string.go type stringStruct struct... 查看详情

20220712go语言基础知识

...础1.内置函数2.流程控制2.1.if与switch2.1.1.if2.1.2.switch2.2.for3.指针3.1.指针地址和指针类型3.2.指针取值3.3.空指针4.数组Array4.1.数组定义4.2.数组定义4.3.与数组相关的函数5.切分Slice5.1.切分Slice定义5.2.切分Slice初始化5.3.cap与len5.4.操作方... 查看详情

go语言指针数组(代码片段)

实例1:packagemainimport"fmt"constMAXint=3funcmain()a:=[]int10,100,200variintfori=0;i<MAX;i++fmt.Printf("a[%d]=%d\\n",i,a[i])实例2:packagemain 查看详情

go学习3

Go具有指针,与C不同,Go没有指针运算。类型*T是指向T类型值的指针。其零值为nil。结构体字段通过结构体指针直接写p.X就可以,和结构体一样使用Name:语法可以仅列出部分结构体字段。类型[n]T表示拥有n个T类型的值的数组。类型[... 查看详情

go语言之字符串指针数组切片(代码片段)

一:字符串概述:Go语言将字符串作为种原生的基本数据类型,字符串的初始化可以使用字符串字面量。(1)字符串是常量,可以通过类数组索引访问其字节单元,但是不能修改某个字节的值(2〕宇符串转换为切片[]byte(要慎用... 查看详情

指针数组和数组指针的区别

最开始学习c语言的时候,老是对指针数组和数组指针弄混淆,但是从英文解释来看就比较容易了。指针数组:arrayofpointers,即用于存储指针的数组,也就是数组元素都是指针。数组指针: apointertoanarray,即指向数组的指针。比如... 查看详情

c语言之数组指针指针数组(代码片段)

数组与指针的爱恨情仇数组和指针问题导引作为函数参数的数组名问题1:我们可以使用任何一种声明,但哪一个更准确一些呢?代码上看指针数组与数组指针数组指针:指向数组的指针数组指针的定义方式一方式... 查看详情

c语言之数组指针指针数组(代码片段)

数组与指针的爱恨情仇数组和指针问题导引作为函数参数的数组名问题1:我们可以使用任何一种声明,但哪一个更准确一些呢?代码上看指针数组与数组指针数组指针:指向数组的指针数组指针的定义方式一方式... 查看详情

c语言数组指针和指针数组实例演示(代码片段)

一.数组指针1.简介数组指针就是指向数组的指针。定义方式:int(*p)[len]=NULL;示例:#include<stdio.h>intmain()intarray[5];//定义一个有五个元素的数组int(*p)[5]=NULL;//定义一个指向这个数组的指针p=&array;//p指向数组的第一个元... 查看详情