数组指针和指针数组和二重指针

author author     2022-09-07     227

关键词:

数组指针和指针数组从字面上来看很纠结,有时候我也搞不清,分不清哪样的是数组指针,哪样的是指针数组。这东西就不是靠记忆的,我们采取分析加对比分层剥离的方法分析。

1.概念区别 
1.1.数组指针:定语在前,主语在后。也就是数组的指针。一个指针,它指向一个数组。 
1.2.指针数组:定语在前,主语在后。也就是指针 的数组。一个数组,里面的元素都是指针。

2.指针和数组分别定义的符号 
2.1 int * p; 
分析: 
第一步:找核心,核心是p。 
第二步:逐层剥离,p和*结合是指针。所以int*p;是定义了一个指针

2.2. int p[5]; 
分析: 
第一步:找核心,核心是p。 
第二步:逐层剥离,p和[]结合是数组。所以int p[5];是定义了一个数组。

3.指针数组和数组指针分别定义的符号 
3.1 int * p[5] 
分析: 
第一步:找核心,核心是p。 
第二步:逐层剥离,这时候p先和[]结合还是先和*结合,查优先级表得到[]优先级更高。所以p先和[]结合成为数组。 
第三步:继续逐层剥离,p[5]这个数组再和*结合 
第四步:得到结果,有一个数组有5个元素,其元素都是指针,即指针数组。

3.2. int (* p)[5]; 
分析: 
第一步:找核心,核心是p。 
第二步:逐层剥离,p和谁结合?小括号优先级更高,所以p先和*结合成为指针, 
第三步:继续逐层剥离,*p这个指针再和数组结合, 
第四步:得到结果,有一个指针,该指针指向一个数组,即数组指针。

4.一维指针int * 和数组指针int (*)[]的类型匹配问题 
4.1. 
int * p; 
int a[5]; 
p = a; //类型匹配吗?

别怕,我们来分析 
(1)p和结合是指针,再和int结合,说明,p是一个指向int类型变量的指针,类型为int 
(2)a是数组名,a做右值表示数组首元素的首地址,首元素是int类型,首元素的地址是int*类型。 
(3)得出结论,p和a类型一致。都是int*类型的。

4.2. 
int * p; 
int a[5]; 
p = & a; //类型匹配吗?

我们再来分析 
(1)p和结合是指针,再和int结合,说明,p是一个指向int类型变量的指针,类型为int 
(2)a是数组名,&a做右值表示整个数组的首地址,也就是一个指向数组的指针,即数组指针,其类型为 int(*)[] 
(3)第三步:得出结论,p和&a类型不匹配,p的类型是int*,&a的类型是int(*)[]

5.二维指针int * * p1;和指针数组 int*p2[5];(实际中用的比较少,如果用到二维指针肯定是和指针数组连用) 
5.1.指针数组 
int *p[5];

分析: 
第一步:p先和[]结合是数组,再和*结合,也就是数组里面的元素都是指针,也就是说,数组中的元素,p0,p1,p2,p3,p4,都是指针,那数组名p是什么类型? 
第二步:数组名p做右值时表示整个数组的首地址,整个数组都是指针,那p就是指针的指针了,即p的类型是指向指针的指针,二重指针。 
重要:二重指针就是指针数组指针 
分析能力是很重要的,比学到知识本身重要,我们永远不能学完所有的知识,但我们可以提高学习的效率。 学习本身比学习更总要。


本文出自 “13088918” 博客,请务必保留此出处http://13098918.blog.51cto.com/13088918/1945215

指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为參数,泛型函数

??1、指针数组  数组里面的每一个元素都是指针。  指针数组的案比例如以下:  易犯错误:2、数组指针 归根结底还是指针,仅仅是取*的时候可以取出一整个数组出来。数组指针:(一个指针指向了数... 查看详情

二重指针应用(代码片段)

1//利用二重指针实现改变指针数组和数组元素之间的mapping,并没有改变原数组23#include<stdio.h>4inta[5];5int*name[]=&a[0],&a[1],&a[2],&a[3],&a[4];6int**p;7intmain()89p=name;10voidsort(int**,int);11voidprint(int**,int);12for(inti=0;i<sizeof(a)/s... 查看详情

未解决问题:指针作参数二重指针指针数组动态内存分配

题目:输入m个学生n门课的成绩,计算每个学生的平均成绩,输入学生编号后输出该学生各门课的成绩。先直接上源码:(有错误的源码)#include<stdio.h>#include<stdlib.h>#include<stdbool.h>int**pointer_counterpart=NULL;intmain(){voidIn... 查看详情

c语言中的二维数组名是一个二重指针吗?

...一个指针值,那么*(*p)即二级指针指向的最终值对于二维数组a[2][2],a也是一个地址,并且这个值也等于a[0],也等于a[0[0]的地址,即&a[0][0],由此看来对a取地址的值是一个变量值(不是指针),所以a并不是一个二级指针,最多算... 查看详情

数组指针和指针数组

数组指针和指针数组一、概念数组指针就是指针,是指向数组的指针,apointertoanarray,首先它是一个指针,它指向一个数组,在32位系统下永远是占4个字节。指针数组就是数组,是个保存指针的数组,arrayofpointers,即用于存储指... 查看详情

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

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

指针数组和数组指针

指针数组:首先是一个数组,数组的元素都是指针。举例:int *p[4];   等价于int*(p[4]); 数组指针:首先是一个指针,指向一个含有四个整形元素的一维数组。举例:int (*p)[4]; 查看详情

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

数组指针和指针数组的区别http://www.cnblogs.com/mq0036/p/3382732.html 查看详情

数组指针和指针数组(代码片段)

首先:校正一下读法:数组指针:给它在中间加上一个的,数组的指针,重心是指针,全名叫指向数组的指针,它就一个指针,指向数组指针数组:同样也在中间加上一个的,指针的数组,重心是数组,全名叫存储指针的数组,... 查看详情

二重指针实现排序

1//双指针对十个数排序23#include<stdio.h>4#include<stdlib.h>5#defineN86//2017.3.57intmain()8{9//初始化数组赋值N个数用指针数组指向10intnum[N];11int*pNum[N];12int**p=NULL;13for(inti=0;i<N;i++)14{15num[i]=rand()%10 查看详情

指针数组和数组指针

 int*num[10] 定义了一个指针数组,代表一个含有10个int型指针的数组; int(*num)[10] 定义了一个指针数组,代表num是一个指针,指向含有10个int型整数的数组; 如上形式, int(*fun(inti))[10]; 声明了一个返回值... 查看详情

指针数组和数组指针(搬运)

指针数组:arrayofpointers,即用于存储指针的数组,也就是数组元素都是指针int*a[4]   表示:数组a中的元素都为int型指针,元素表示:*a[i]  *(a[i])是一样的,因为[]优先级高于*数组指针:apointertoanarray,即指向数... 查看详情

一级指针,二级指针,指针数组,数组和指针

指针和数组指针是个用来存放地址的变量;&arr表示整个数组;arr数组名表示首元素的地址;指针解引用即表示指针所指向的内容比如:charptr="abcdef";ptr;//指针解引用即表示它所指向的内容,即abcdefptr;//ptr里保存的是字符... 查看详情

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

1:指针数组:就是这个数组里面的元素全部是指针;即地址如:inta[]=1,2,3,4,5;int*p[]=&a[0],&a[1],&a[2],&a[3],&a[4];//全部元素都是地址2:数组指针:指向数组的指针叫数组指针int (*p)[4];//数组指针也就是行指针;该p指... 查看详情

指向指针数组和指针数组的指针之间的区别[重复]

】指向指针数组和指针数组的指针之间的区别[重复]【英文标题】:Differencebetweenpointertopointerarrayandpointerarray[duplicate]【发布时间】:2014-01-2213:44:42【问题描述】:int**p和int*p2[5]在第一种情况下有什么不同,p是指向我稍后将定义... 查看详情

二维数组和二级指针关系浅析

  昨天写了关于一级指针的见解,即二级数组的用法和二级指针差不多,关于数组指针和指针数组这两个是不同的概念,这一点我们一定要清楚;  数组指针我们可以理解为指向数组的指针,就是一个指针;  指针数组则... 查看详情

数组指针和指针数组的区别(代码片段)

数组指针和指针数组的区别谈数组指针和指针数组两个概念的时候先对优先级的知识进行温故知新,不然直接上手去记忆很容易混淆。运算符优先级()>[]>*数组指针数组指针(也称行指针)定义int(*p)[n];()优先级高&... 查看详情

指针,数组指针,指针数组,函数指针解析(代码片段)

...1.2*运算符和&运算符1.3创建指针变量1.4int*p的解释二、数组指针指针数组2.1数组指针和指针数组的理解2.2数组指针和指针数组的定义方式2.3代码分析三、函数指针3.1函数指针的概念3.2函数指针的定义3.3函数指针的使用四、套娃4... 查看详情