鱼C论坛

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

[已解决]求大佬帮助,一个问题想了很久没想明白

[复制链接]
发表于 2019-4-21 14:14:52 | 显示全部楼层 |阅读模式

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

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

x





#include <stdio.h>

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

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

        return 0;
}

我的理解:
前提是把这个array看成一个二维数组:
指针p指向整个数组,可以把array看做是一个二维数组,只不过这个二维数组的列为0,写成 int array[10][0],所以p==&array[0],所以p+1==&arrary[1],而array[1]可以看做是第二列的首个元素的地址,
所以  *(p+1)== *(&array[1]) == arrary[1] 能不能这么理解,但是这么理解又得不出答案。

而且array[1]是一个地址,*(p+1)不应该是一个确定的值而不是地址嘛??
我很困惑,希望大佬能够救济一下我,我这个问题困扰我很久了。

而且小甲鱼的说法 怎么理解,答案  4  又是怎么来的???
最佳答案
2019-4-21 15:11:00
一个小蚂蚁 发表于 2019-4-21 15:08
为什么是arrary4啊,不是这个p指针指向了数据外啊

(p+1)是指向数据外,但是-6又指回来了啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-21 15:03:51 | 显示全部楼层
首先,array本身是1维数组,你不能将其看做二维数组。array拥有的这一块数据你确实可以把它看做二维数组,准确地说,你可以把它看成任何东西。但是,这块数据一旦和已经定义了变量类型的变量名array联系起来,那么你就只能把它看做长度为10的一维数组。之后,你array[1]是个地址什么的问题同样也不存在,

第二,同样,p的指针类型是指向(长度为10的整数数组)的指针。这意味着,不管它指向的数据块属于哪个变量名,你只要使用p,那么它都会把这块数据看做(长度为10的整数数组),
那么(p+1)相比p, 就偏离了1个单位的(长度为10的整数数组的长度),也就是偏离了(10个整数长度),
解引用之后再减6,那么就是偏离了(4个整数长度),那么这个值就是array[4],也就是4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-21 15:08:50 | 显示全部楼层
Croper 发表于 2019-4-21 15:03
首先,array本身是1维数组,你不能将其看做二维数组。array拥有的这一块数据你确实可以把它看做二维数组, ...

为什么是arrary4啊,不是这个p指针指向了数据外啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-21 15:11:00 | 显示全部楼层    本楼为最佳答案   
一个小蚂蚁 发表于 2019-4-21 15:08
为什么是arrary4啊,不是这个p指针指向了数据外啊

(p+1)是指向数据外,但是-6又指回来了啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-21 15:11:50 | 显示全部楼层
Croper 发表于 2019-4-21 15:03
首先,array本身是1维数组,你不能将其看做二维数组。array拥有的这一块数据你确实可以把它看做二维数组, ...

不是应该说指向了这个数组所在之外的空间了嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-21 15:17:47 | 显示全部楼层
这么想,你可以把数组之外的空间看做炸弹,摸一下就会爆炸那种;
但是指针指向数组之外的空间,就像你指一下炸弹,没有访问(摸到)的话并没有什么大不了,
这个例子就像你指一下炸弹,然后又指回来,摸了摸小绵羊。除了吓人一跳外,并没有什么问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-21 15:19:30 | 显示全部楼层
一个小蚂蚁 发表于 2019-4-21 15:08
为什么是arrary4啊,不是这个p指针指向了数据外啊

为什么是-6,这个*(*(p+1)-6)怎么理解,我就卡在这里了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-21 15:29:21 | 显示全部楼层
所以你理解到哪个地方卡壳的?

全部再解释一遍的话和第一个答案已经做了这件事儿了啊

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
一个小蚂蚁 + 5 + 5 感谢楼主无私奉献!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2019-4-21 15:32:22 | 显示全部楼层
Croper 发表于 2019-4-21 15:29
所以你理解到哪个地方卡壳的?

全部再解释一遍的话和第一个答案已经做了这件事儿了啊

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 15:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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