鱼C论坛

 找回密码
 立即注册
查看: 1953|回复: 5

[已解决]第23课,数组指针的程序不是很理解

[复制链接]
发表于 2018-4-26 17:53:57 | 显示全部楼层 |阅读模式

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

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

x
看不懂的部分用//标出来了。
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int temp[5] = {1, 2, 3, 4, 5};
  5.         int (*p2)[5] = &temp;
  6.         int i;

  7.         for (i = 0; i < 5; i++)
  8.         {
  9.                 // p2表示数组的地址,那*p2 表示的不就是整个数组的值?
  10.                
  11.                 printf("%d\n", *(*p2 + i));
  12.         }

  13.         return 0;
  14. }
复制代码
最佳答案
2018-4-26 18:03:32
(*p2)[5] 是数组指针 意指 指向数组的指针

那么p2是数组的地址。
*p2 是数组第1个元素的地址。
那么*p2 + i 第1个元素的地址 + i 第i个元素的地址。
再那么*(*p2) 取第1个元素的值。
再那么*(*p2 + i)取第i个元素的值。

这个最最最最要注意的是 数组指针 指向的是数组(是数组的地址,虽然它和第1个元素的地址是一样,但是它们还是有区别的)。 解引用后(*p)后是第1个元素的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-26 18:03:32 | 显示全部楼层    本楼为最佳答案   
(*p2)[5] 是数组指针 意指 指向数组的指针

那么p2是数组的地址。
*p2 是数组第1个元素的地址。
那么*p2 + i 第1个元素的地址 + i 第i个元素的地址。
再那么*(*p2) 取第1个元素的值。
再那么*(*p2 + i)取第i个元素的值。

这个最最最最要注意的是 数组指针 指向的是数组(是数组的地址,虽然它和第1个元素的地址是一样,但是它们还是有区别的)。 解引用后(*p)后是第1个元素的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-26 18:07:36 | 显示全部楼层
2018-04-26_180651.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-26 18:15:10 | 显示全部楼层

谢谢回复,p2是数组的地址,为什么*p2是第一个元素的地址呢?之前学习的 指针p,*p 表示p保存的地址的那个地址中的值,为什么到这里加星号变成了第一个元素的地址?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-26 18:19:42 | 显示全部楼层
markfzc 发表于 2018-4-26 18:15
谢谢回复,p2是数组的地址,为什么*p2是第一个元素的地址呢?之前学习的 指针p,*p 表示p保存的地址的那 ...

你也知道说是 指针p
指针p 跟 数组指针p 是一回事么? 说多了你也不一定消化的了,记住上面的就对了。

你实在有这个能力可以看下面:
数组指针和指针是两个不同的类型:
假设:int array[2][3]={{1,2,3},{4,5,6}};
1,二维数组名是数组指针 (array: 是指向int (*)[3]类型的指针)
2,二维数组名取址是二维数组指针 (&array: 是指向 int (*)[2][3]类型的指针)
3,二维数第0行的首地址是数组指针(&array[0]:是指向int (*)[3]类型的指针)
4,二维数组首元素的地址是指针类型(array[0]:是指向int *类型的指针)

参考:http://blog.csdn.net/pipinuan/article/details/53193289
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-26 22:09:55 | 显示全部楼层
ba21 发表于 2018-4-26 18:19
你也知道说是 指针p
指针p 跟 数组指针p 是一回事么? 说多了你也不一定消化的了,记住上面的就对了。
...

想明白了,其实就是类似于层层包裹。解引用就是类似层层突破。只要没有取到值,得到就永远是地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 14:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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