鱼C论坛

 找回密码
 立即注册
查看: 1424|回复: 6

数组指针的疑惑

[复制链接]
发表于 2017-1-2 20:04:28 | 显示全部楼层 |阅读模式

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

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

x


  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  5.         int (*p)[10] = &array;    \\    我对这里有疑问  也尝试修了许多数值 但都报错   这句话里步长[10]为什么必须和数组大小相同?问什么不可以舍去步                                        \\                                                     长是int *p=&array???

  6.         printf("%d\n", *(*(p+1)-2));

  7.         return 0;
  8. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-2 21:25:08 | 显示全部楼层
我是这样想的,如果不指定[ ]中的内容,那么p指针的意思就变成了指向任何长度的数组的指针,既而p+1将无法确定一行有多少个元素,从而造成混乱...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-2 22:20:19 | 显示全部楼层
代码农民 发表于 2017-1-2 21:25
我是这样想的,如果不指定[ ]中的内容,那么p指针的意思就变成了指向任何长度的数组的指针,既而p+1将无法 ...

那为什么要和数组元素个数一样呢....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-3 08:46:59 | 显示全部楼层
(*p)[10]代表的是二维数组指针,array[10]是一维数组,int *p=array 即可。

上题中(*p)[10]可理解为指向了包含array[10]元素的二维数组er_array[1][10]。二维数位可理解为在一个维数组内含有N(10)个地址元素。(相关阐述可查阅二维指针的定义资料).
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-3 09:37:50 | 显示全部楼层
向来喜欢用一图流解释,首先看原代码:

  1.         int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  2.         int (*p)[10] = &array;  
复制代码

1.png

解析p:
        p是一个指向  int [10]的指针,跨度就是一个含10个int元素的数组,实际上就是4*10字节。和&array代表的意思一样。
        *p是指向一个int元素的指针,跨度是int的占位宽,即4字节。和array代表的意思一样。
        所谓“左右[ ]内的数值一样”的理由就是,跨度必须一样,类型才相同,左右才能对齐。

那么,我们修改代码,让[ ]内左右不同(编译时候会警告,提示左右类型不同,暂时无视!)代码如下:

  1.         int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  2.         int (*x)[4] = &array;  
复制代码

2.png

解析x:
        x是一个指向 int [4]的指针,跨度是4*4字节,即16字节。
        *x是一个指向int元素的指针,跨度是4字节。

我觉得我能说明的,也就这么多了。能理解就好,不能理解再换其他解释。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-3 16:52:16 | 显示全部楼层
hswangrui 发表于 2017-1-2 22:20
那为什么要和数组元素个数一样呢....

int (*p)[10];
在这个声明里,p是个行指针,同时对p这一行指针给出了限制[10]....所以你在用p这个指针的时候只能指向10个元素的数组..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-3 17:27:39 | 显示全部楼层
zealstar 发表于 2017-1-3 09:37
向来喜欢用一图流解释,首先看原代码:

谢谢。。。打字辛苦!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 22:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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