老坚果 发表于 2019-10-23 16:23:54

数组指针到底是个什么东西

这个指针数组我能理解,就是由指针组成的数组,有用。
但是这个数组指针是个什么东西?写法这么复杂,光靠视频里的东西也不全明白,就我的理解是一个指向数组的指针,那不就是和给指针赋一个数组的值是一样的吗?那还非费这个劲干嘛啊?
还是说我理解错了啊?还有别的功能吗?
求各位大佬指点。。。

ba21 发表于 2019-10-23 16:31:27

已经说得很清楚了,2句话,自己多读几遍
指针数组:是一个数组,数组里面存入的指针变量
数组指针:是一个指针,该指针指向了一个数组

老坚果 发表于 2019-10-23 16:43:05

ba21 发表于 2019-10-23 16:31
已经说得很清楚了,2句话,自己多读几遍
指针数组:是一个数组,数组里面存入的指针变量
数组指针:是一 ...

我不是分不清啦,我只是不明白为什么还要用数组指针这个概念啊?直接用指针不可以吗?指针指向数组名和数组指针指向数组,两者之间有什么区别啊?

ba21 发表于 2019-10-23 16:59:57

老坚果 发表于 2019-10-23 16:43
我不是分不清啦,我只是不明白为什么还要用数组指针这个概念啊?直接用指针不可以吗?指针指向数组名和数 ...

指针是指针。数组指针是数组指针。
各有各的用处

老坚果 发表于 2019-10-23 17:08:55

ba21 发表于 2019-10-23 16:59
指针是指针。数组指针是数组指针。
各有各的用处

您这不是跟没说一样吗

jackz007 发表于 2019-10-23 17:09:12

int (*p) , * q ;
      要说数组指针和普通指针的区别,p 指向由 8 个整型数数组构成的单元,所以,p ++ 的时候,指针跨度是 8 个整型数构成的存储单元,所以,p 应该指向末维为 8 的多维整型数组,适合数组元素的大段定位;q 只是普通的整型数指针,q ++ 的跨度只是一个整型数所占用的存储单元,适合挨个访问数组中的元素。

ba21 发表于 2019-10-23 17:15:09

老坚果 发表于 2019-10-23 17:08
您这不是跟没说一样吗

我写本书给你好不好?

老坚果 发表于 2019-10-23 17:18:29

jackz007 发表于 2019-10-23 17:09
要说数组指针和普通指针的区别,p 指向由 8 个整型数数组构成的单元,所以,p ++ 的时候,指针跨 ...

意思是输出数组指针指向的值的时候 输出的是整个数组的值 ,是这个意思吗?那末维是什么意思啊?

老坚果 发表于 2019-10-23 17:20:11

ba21 发表于 2019-10-23 17:15
我写本书给你好不好?

抱歉抱歉 是我鲁莽了

老坚果 发表于 2019-10-23 17:27:48

jackz007 发表于 2019-10-23 17:09
要说数组指针和普通指针的区别,p 指向由 8 个整型数数组构成的单元,所以,p ++ 的时候,指针跨 ...

对了 老哥 我还想问一下   

就是(*p2) 这个是一个数组指针

和他对应的*(*p2+i)这是个什么意思啊?视频里说这个*p2是取地址的用法 可指针加*不应该是取值的意思吗?

jackz007 发表于 2019-10-23 17:38:22

老坚果 发表于 2019-10-23 17:18
意思是输出数组指针指向的值的时候 输出的是整个数组的值 ,是这个意思吗?那末维是什么意思啊?

    int array
    上面的定义就是末维为 8 的整型数组,无论有多少维,只要最后那一维是 8 个元素就是了。
    指向数组的指针所指向的数值仍然是指针(地址),如果要访问具体的数组元素还需要继续取值。

    研究一下下面的代码,对你也许会有所帮助:
#include <stdio.h>
main(void)
{
      int array = {{1 , 2 , 3 , 4 ,5 , 6 , 7 , 8} ,\
                           {11 , 12 , 13 , 14 , 15 , 16 , 17 , 18} ,\
                           {21 , 22 , 23 , 24 , 25 , 26 , 27 , 28} ,\
                           {31 , 32 , 33 , 34 , 35 , 36 , 37 , 38} ,\
                           {41 , 42 , 43 , 44 , 45 , 46 , 47 , 48}} ;
      int (* p)                                                ;
      p = array                                                   ;
      printf("array = %d\n" , * (* (p + 3) + 6))            ;
}


   

老坚果 发表于 2019-10-23 18:50:06

本帖最后由 老坚果 于 2019-10-23 18:52 编辑

jackz007 发表于 2019-10-23 17:38
int array
    上面的定义就是末维为 8 的整型数组,无论有多少维,只要 ...

老哥 你这个代码直接把我搞懵了啊 我理解了一下 有种懵懵懂懂抓住了点什么的感觉 但是理解的有点奇葩 所以我也不确定对不对啊。。。

老哥你我理解的对不对啊:

*号并不仅仅用于指针的取值,他的根本作用在于降维的时候对某一区域值的定位 。

是这样吗哥?

爱喝可乐的JQ 发表于 2019-11-1 17:21:03

老坚果 发表于 2019-10-23 17:27
对了 老哥 我还想问一下   

就是(*p2) 这个是一个数组指针


同是这个问题

老坚果 发表于 2019-11-5 17:13:30

爱喝可乐的JQ 发表于 2019-11-1 17:21
同是这个问题

这个我现在可以回复你了,星号实际上是解引用的意思。也就是说这个数组指针第一次解引用获得了它所指向数组的地址,而数组名就意味着地址,地址上再进行的运算就相当于在数组中挑选相应的数据,然后在进行解引用。我这帖子都结了,你回复别人看不到的

爱喝可乐的JQ 发表于 2019-11-8 02:54:02

老坚果 发表于 2019-11-5 17:13
这个我现在可以回复你了,星号实际上是解引用的意思。也就是说这个数组指针第一次解引用获得了它所指向数 ...

谢谢{:10_254:}
页: [1]
查看完整版本: 数组指针到底是个什么东西