首页 > 试题广场 >

数组指针和指针数组有什么区别 ?

[不定项选择题]
数组指针和指针数组有什么区别 ?
  • 数组指针只是一个指针变量,它占有内存中一个指针的存储空间
  • 指针数组只是一个指针变量,它占有内存中一个指针的存储空间
  • 指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间
  • 数组指针是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间
完美的避开了答案
发表于 2016-08-22 21:58:00 回复(0)
更多回答
推荐
A,C
数组指针只是一个指针变量,指向一个一维数组,它占有内存中一个指针的存储空间,指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。
编辑于 2015-01-04 14:30:11 回复(0)

数组指针(也称行指针) 
定义 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=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。
如要将二维数组赋给一指针数组:
int *p[3];
int a[3][4];
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]

        --- 引自hongcha_717博客
发表于 2015-10-23 19:29:14 回复(2)
数组指针的本质是指针,这个指针指向数组,而指针数组的本质是数组,数组存放的元素是指针。
发表于 2015-09-02 01:02:21 回复(1)
AC
数组指针只是一个指针变量,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。
发表于 2015-01-04 11:41:38 回复(0)

数组的指针:是一个指针,什么样的指针呢?指向数组的指针。

指针的数组:是一个数组,什么样的数组呢?装着指针的数组

发表于 2022-08-01 14:58:25 回复(0)
顾名思义,数组指针就是某一个数组的指针。(比如掏粪的经纪人,就算掏粪有三个人,他们也是一个组合,因此对应一个经纪人) 指针数组,就是把很多个指针放到一个数组里面。(不同明星的经纪人齐聚一堂)
发表于 2023-02-06 11:53:16 回复(1)
炫头像
可以参考博文:http://www.cnblogs.com/mq0036/p/3382732.html
发表于 2016-07-11 13:37:20 回复(0)
A C
发表于 2015-09-06 13:22:05 回复(0)
AC
发表于 2015-01-04 13:01:33 回复(0)

数组指针(也称行指针) 
定义 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=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。
如要将二维数组赋给一指针数组:
int *p[3];
int a[3][4];
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]

        --- 引自hongcha_717博客
发表于 2022-04-28 16:49:59 回复(0)
数组指针是指向数组的指针;指针数组是装着指针的数组。
发表于 2023-08-22 12:41:41 回复(0)
前面的是形容词,后面的是名词
发表于 2022-09-13 11:07:54 回复(0)

数组指针

int (*p)[233]

先(p) 说明是一个指针 再说明 指向的类型是数组
一个指针变量 用来指向*
数组指针**
###指针数组
多个指针变量 一个数组用来存放多个指针(存放的指针可以是多种类型的)

int *p[233]

先说明类型是数组 后说明是指针

发表于 2022-08-22 15:58:19 回复(0)
数组指针,是数组的一个指着变量,只向数组的第一个元素 指针数组是,包含很多个指针的数组
发表于 2022-03-31 14:28:02 回复(0)
a和b,c和d是一样的啊
发表于 2022-03-07 13:10:04 回复(1)
答案:AC

int len = 10;
int *a[len];   // 指针数组,先读指针符号:一个int 型指针a,然后侍一个数组类型,其元素类型就是 int 指针;
int (*a)[len];   // 数组指针,先读括号内的:一个指针a,指向长度为10的int数组类型;

-----貌似在 C相关的那几本书有说,直接百度也很简单
编辑于 2021-11-06 18:04:14 回复(0)
<p>数组指针,指针数组,最终看最后两个字的落脚点,是数组还是指针。</p><p>指针是一个变量,数组十多个元素的变量。</p>
发表于 2020-12-14 14:23:51 回复(0)
AC原因如下:
数组指针:是某个数组的一个指针变量
指针数组:是包含了n个指针的数组
发表于 2020-06-15 11:30:31 回复(0)
A.C
发表于 2019-07-26 12:11:38 回复(1)
数组指针(也称行指针): int (*p)[n] p 是一个指针,代表着指向包含三个 int 元素数组的指针,指向一个整型的一维或二维数组。
指针数组 int *p[n] 先与 p 结合成为一个数组,再由 int* 说明这是一个整型指针数组,它有 n 个指针类型的数组元素。
发表于 2016-09-22 21:51:17 回复(0)