鱼C论坛

 找回密码
 立即注册
查看: 1695|回复: 8

[已解决]指针的指针不能指向整个数组吗?

[复制链接]
发表于 2018-10-7 11:52:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用函数指针指向数组可以正常编译
但是我想用指针的指针指向数组为什么编译不了。
我的理解是数组也可以当作指针来用  那么指针的指针可以指向数组。
最佳答案
2018-10-7 12:48:29
风骚的小胖子。 发表于 2018-10-7 12:34
我的理解是这样你看对不对。
指针的指针指向指针的地址,数组名可以当作指针 但是他的实质不是指针,就 ...

   (存放数值的)数组名相当于一个一级指针,只能用一级指针来指向。
而(存放指针的)数组名相当于一个二级指针,因为它里面的指针还有指向。它只能用二级指针指向。
同理,如果存放指针的数组里面 存放的指针是个二级指针,那么数组名就相当于一个三级指针,需要用三级指针来指向。
   多级指针指向是逐级对应的,比如你如果把一个二级指针**p指向一个一级指针*q。那么*p 就等于q指向的值。指针是地址,怎么能等于值呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-10-7 11:54:48 | 显示全部楼层
求解啊
121.png
asd.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-7 12:17:45 | 显示全部楼层
数组当作指针来用那是一级指针 如
int array[n];
array指向数组首地址array[0]

而二级指针只能指向指针数组 如
int *array[n];
int **p = array是合法的
二级指针在指向时是逐级指向的
上面这个例子
*p 指向 array[0] 这个指针
而**p 指向array[0]这个指针指向的东西

如果将以及指针赋值给二级指针那就没法对应了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-7 12:26:56 From FishC Mobile | 显示全部楼层
风骚的小胖子。 发表于 2018-10-7 11:54
求解啊

&array 是整个数组,不是首元素的地址,已经是最高级别的范围了,你直接用单指针就行了。然后下面需要多一个解引用。
int *p 或者 int* p 都可以,但是你可以这样看。int (*p),参考整型的指针。int* (*p) 参考指向整型的指针。
&array 是一个地址,没有参考元素,所以用单指针就好。数据类型不匹配。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-7 12:34:16 | 显示全部楼层
1005204767 发表于 2018-10-7 12:17
数组当作指针来用那是一级指针 如
int array[n];
array指向数组首地址array[0]

我的理解是这样你看对不对。
指针的指针指向指针的地址,数组名可以当作指针 但是他的实质不是指针,就和指针能做左值而数组名不能做左值一个性质。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-7 12:36:44 | 显示全部楼层
claws0n 发表于 2018-10-7 12:26
&array 是整个数组,不是首元素的地址,已经是最高级别的范围了,你直接用单指针就行了。然后下面需要多 ...

我的理解是这样你看对不对。
指针的指针指向指针的地址,数组名可以当作指针 但是他的实质不是指针,就和指针能做左值而数组名不能做左值一个性质。
老哥你这个解答是没明白我的意思 。我的意思是为什么二级指针不能指向数组,是本来就不能指还是我书写错误还是什么的。 而不是要别的来指向数组 别的指向数组我懂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-7 12:48:29 | 显示全部楼层    本楼为最佳答案   
风骚的小胖子。 发表于 2018-10-7 12:34
我的理解是这样你看对不对。
指针的指针指向指针的地址,数组名可以当作指针 但是他的实质不是指针,就 ...

   (存放数值的)数组名相当于一个一级指针,只能用一级指针来指向。
而(存放指针的)数组名相当于一个二级指针,因为它里面的指针还有指向。它只能用二级指针指向。
同理,如果存放指针的数组里面 存放的指针是个二级指针,那么数组名就相当于一个三级指针,需要用三级指针来指向。
   多级指针指向是逐级对应的,比如你如果把一个二级指针**p指向一个一级指针*q。那么*p 就等于q指向的值。指针是地址,怎么能等于值呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-7 12:59:19 | 显示全部楼层
1005204767 发表于 2018-10-7 12:48
(存放数值的)数组名相当于一个一级指针,只能用一级指针来指向。
而(存放指针的)数组名相当于一 ...

懂了!!谢谢大哥。但是还有一个问题  里面存放指针的数组
int a=10; int b=20;  
int **array={&a,&b}
取值 是 (*(*array+1))=20
但是改为char **array={"带我飞",“带你飞”}
取值怎么取?我看小甲鱼老师就不是用指向指针的指针来指这个数组 而是用in *(*P)[]来指向这个数组。这个能否用指向指针的指针来指?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-7 13:04:39 | 显示全部楼层
风骚的小胖子。 发表于 2018-10-7 12:36
我的理解是这样你看对不对。
指针的指针指向指针的地址,数组名可以当作指针 但是他的实质不是指针,就 ...

数据类型不匹配
3 楼的
而二级指针只能指向指针数组 如
int *array[n];                                                   |   int* array[n]; //数组的元素是指针  <==> int array[n];
int **p = array; 是合法的  // 这个不是二级指针   |   int* (*p) = array;  <==> int *p = array;

你的 array 是 int 型,不是 int* 型,所以不能用 int**p
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-30 12:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表