问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-03-31 10:18

我来回答

3个回答

热心网友 时间:2022-03-31 11:47

数组指针(也称行指针)
定义 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]

优先级:()>[]>*

热心网友 时间:2022-03-31 13:05

指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针。
数组指针:a pointer to an array,即指向数组的指针。
还要注意的是用法的区别,下面举例说明。
int* a[4] 指针数组
表示:数组a中的元素都为int型指针
元素表示:*a[i] *(a[i])是一样的,因为[]优先级高于*
int (*a)[4] 数组指针
表示:指向数组a的指针
元素表示:(*a)[i]
注意:在实际应用中,对于指针数组,经常这样使用:

typedef int* pInt;

pInt a[4];

这跟上面指针数组定义所表达的意思是一样的,只不过采取了类型变换。
代码演示如下:
#include <iostream>
using namespace std;
int main()
{
int c[4]={1,2,3,4};
int *a[4]; //指针数组
int (*b)[4]; //数组指针
b=&c;
//将数组c中元素赋给数组a
for(int i=0;i<4;i++)
{
a[i]=&c[i];
}
//输出看下结果
cout<<*a[1]<<endl; //输出2就对
cout<<(*b)[2]<<endl; //输出3就对
return 0;
}

注意:定义了数组指针,该指针指向这个数组的首地址,必须给指针指定一个地址,容易犯的错得就是,不给b地址,直接用(*b)[i]=c[i]给数组b中元素赋值,这时数组指针不知道指向哪里,调试时可能没错,但运行时肯定出现问题,使用指针时要注意这个问题。但为什么a就不用给他地址呢,a的元素是指针,实际上for循环内已经给数组a中元素指定地址了。但若在for循环内写*a[i]=c[i],这同样会出问题。总之一句话,定义了指针一定要知道指针指向哪里,不然要悲剧。

热心网友 时间:2022-03-31 14:40

数组指针,就是一个指向数组首元素的指针,或者说是指向一个数组起始内存地址的指针。

指针数组,就是一个数组中的所有元素类型均为指针,也就是说是一个专门用来存放一堆指针的数组。
指针数组和数组指针的区别

指针数组和数组指针是两种不同类型的概念。在定义和使用上有所区别指针数组是一个数组,其中的每个元素都是指针类型,而数组指针是一个指针,它指向一个数组的首地址指针数组的声明方式为“typearray”,而数组指针的声明方式为“type(ptr)[size]”。指针数组:指针数组是一个数组,其中的每个元素都是指...

指针数组和数组指针的区别有哪些?

指针数组和数组指针的区别主要有以下几点:1、数组名不可以改变,而指向数组的指针是可以改变的。字符串指针指向的字符串中的字符是不能改变的,而字符数组中的字符是可以改变的。求数组长度时,借用数组名可求得数组长度,而借用指针却得不到数组长度。2、数组名的指向不可以改变,而指向数组的指针是可...

数组指针和指针数组有什么区别( )。

数组指针只是一个指针变量,它占有内存中一个指针的存储空间,而指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。

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

数组指针,是指向数组的指针。通常所说的数组指针,只是一个指针,他只能存放一个地址。一般用于多维数组。举例说明,假设有一个四行五列的二维数组A,C语言认为它是由四个五元素的一维数组首尾相连组成的。当定义一个数组指针P时,让p指向二维数组的首地址,其实他指的也是第一个一维数组的首元素地址,...

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

指针数组是数组,它的元素是指针;而数组指针是指针,可以用来指向数组。如:int a,b,c;//ptarr是指针数组,它有3个元素,每个元素都是指针,分别保存了a、b、c的地址 int *ptarr[]={&amp;a,&amp;b,&amp;c};再如:int arr[]={1,2,3};//arrpt是数组指针,它可以指向一个具有3个int型元素的数组...

指针数组与指向指针的指针有什么区别

他们的区别是:指针数组,表示的是一个由指针变量组成的数组也就是说其中的元素都是指针变量,而数组指针表示的是这是个指向数组的指针。那么该指针变量存储的地址就必须是数组的首地址得是个指向行的地址,比如a[3][4]数组中的 a,a+2 等,不能是具体的指向列的地址,如 &amp;a{2][1], &amp;a[2]...

c语言指针数组和数组指针的区别

对指针数组来说,首先它是一个数组,数组的元素都是指针,也就是说该数组存储的是指针,数组占多少个字节由数组本身决定;而对数组指针来说,首先它是一个指针,它指向一个数组,也就是说它是指向数组的指针,在 32 位系统下永远占 4 字节,至于它指向的数组占多少字节,这个不能够确定,要看具体...

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

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

C语言中:数组指针与指针数组有什么区别?

数组指针是指向这个数组首地址的指针,指向对象是这个数组;指针数组是存放一类指针的数组,这个数组的每个元素都是一个指针;例子:int a[10];int* s;s = a;//这里s就是一个数组指针,它的值就是数组a 的首地址;当然,如果a是一个整数,那s就是一个指向整型的指针;int a;int* s[5];for...

数组指针是指针数组吗?

数组指针是指向数组地址的指针,其本质为指针;指针数组是数组元素为指针的数组(例如 int *p[4],定义了p[0],p[1],p[2],p[3]三个指针),其本质为数组。数组指针的使用在某些情况下与指针数组很相似,要注意区别。p是一个指针变量,它指向包含4个int元素的一维数组,此时p的增量以它所指向的...

int *p[4]和int(*p)[4] 数组指针和指针数组的写法 const变量可以定义数组维度吗 c语言数组指针和指针数组 数组面试题js 二维数组指针的用法 结构体数组指针定义 比较指针的内容函数是什么 数组指针大小
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在网贷平台借款是否合法?如何判断网贷公司合法性? 怎样才能把礼物送给别人而又不显得尴尬呢? 笔记本电脑黑屏只有鼠标的解决方法 戴尔笔记本开机黑屏只有鼠标是怎么回事? 如何申请澳大利亚旅游签证? | 澳洲旅游签证申请攻略 笔记本开机黑屏只有鼠标怎么办? 笔记本电脑黑屏,但是鼠标可以移动? 石家庄铁道大学现任领导 石家庄铁道大学行政级别 为什么卡西欧的计算器很牛很多都被称为竞赛决赛指定用机 怎么教狗狗趴下 怎么训练狗狗趴下? 怎么训练狗狗趴下? 新手养狗:如何训练狗狗趴下,别动,翻身 为什么狗会趴在家里很高的地方? 怎么教狗狗趴下呢? 小狗趴着是什麽意思啊 如何训练狗狗趴下,如何训练家中狗狗? 狗狗趴下代表什么 微信公众号消息里如何加那种可以直接点开的词语 的老房子,住了几十年了,没有房产证,拆迁会有补偿吗 我家狗狗总是趴着!怎么回事? 如何在微信公众号里直接嵌入制作的视频 的狗狗趴下是什么样子 怎样利用微信公众号进行收款? 寮 怎么读 为什么狗狗喜欢趴着睡 整个小区十年了都没有房产证,该怎么办 狗狗为什么老喜欢趴着?? 买房十年,还没拿到房产证,到底该怎么办 狗狗趴着全身发抖,全身颤抖,怎么办? 如何训练狗狗趴下 石家庄在哪? 石家庄在哪个省 石家庄市区面积是多少? 石家庄的地域和文化特色 是什么? 河北石家庄市的地理位置 石家庄属于什么级别城市? 石家庄的地理位置 石家庄的海拔高度是多少? 石家庄的地址在哪里 石家庄介绍 石家庄著名地点? 石家庄的地名的来历 石家庄地理位置 石家庄是北方吗? 石家庄好玩的地方有哪些? 5.05立方米=()立方米()立方分米 5.05立方米等于几分之几立方分米? 5.5立方米等于多少立方米多少立方分米?