鱼C论坛

 找回密码
 立即注册
查看: 675|回复: 3

[已解决][课后作业] S1E24:指针和二维数组t4

[复制链接]
发表于 2021-12-17 00:00:57 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

int main()
{
        char array[2][3][5] = {
                {
                        {'x', 'x', 'x', 'x', 'x'},
                        {'x', 'x', 'o', 'x', 'x'},
                        {'x', 'x', 'x', 'x', 'x'}
                },
                {
                        {'x', 'x', 'x', 'x', 'x'},
                        {'x', 'x', 'o', 'x', 'x'},
                        {'x', 'x', 'x', 'x', 'x'}
                }
        };

        printf("%c%c%c%c\n", *(*(*array + 1) + 2), *(*(*(array + 1) + 1) + 2), ***array, *(**array + 1));

        return 0;
}
三维真不会,有人能帮忙解释一下吗,感谢
最佳答案
2021-12-17 00:25:28
       只要把 3 层括号补齐,很好办的:
 *(*(*array + 1) + 2) = * ( * ( * (array + 0) + 1) + 2) = array[0][1][2]
 *(*(*(array + 1) + 1) + 2) = array[1][1][2]
 ***array = * (* (* (array + 0) + 0) + 0) = array[0][0][0]
 *(**array + 1) = * (* (* (array + 0) + 0) + 1) = array[0][0][1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-17 00:25:28 | 显示全部楼层    本楼为最佳答案   
       只要把 3 层括号补齐,很好办的:
 *(*(*array + 1) + 2) = * ( * ( * (array + 0) + 1) + 2) = array[0][1][2]
 *(*(*(array + 1) + 1) + 2) = array[1][1][2]
 ***array = * (* (* (array + 0) + 0) + 0) = array[0][0][0]
 *(**array + 1) = * (* (* (array + 0) + 0) + 1) = array[0][0][1]

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
傻眼貓咪 + 5 + 5 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

发表于 2021-12-17 00:34:51 | 显示全部楼层
本帖最后由 人造人 于 2021-12-17 00:37 编辑

对于这类问题,真的不需要较真
这类问题记住一个规则就可以了,然后用这个规则一直往下替换
规则:数组的名字是数组第0个元素的地址

*(*(*array + 1) + 2)

array 替换成 &array[0]
*array -> *&array[0] -> array[0] -> &array[0][0]
*array + 1 -> &array[0][0] + 1 -> &array[0][1]
*(*array + 1) -> *&array[0][1] -> array[0][1] -> &array[0][1][0]
*(*array + 1) + 2 -> &array[0][1][0] + 2 -> &array[0][1][2]
*(*(*array + 1) + 2) -> *&array[0][1][2] -> array[0][1][2]

也就是说 *(*(*array + 1) + 2) 就是 array[0][1][2]

这类问题建议是学了汇编语言以后,再研究这个
站在汇编语言的角度,你可以看到更多的东西
你可以看这样的代码在汇编语言层是怎么处理的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-17 08:56:30 | 显示全部楼层
这道题用语法糖,很好理解,可以参考:什么是语法糖

(1)*(*(*arrary + 1)+2) 用语法糖表示则为:array[0][1][2]  直接看数组找数值为:o
(2)*(*(*(arrary + 1) + 1)+2) 用语法糖表示则为:array[1][1][2]  直接看数组找数值为:o
(3)***arrary 用语法糖表示则为:array[0][0][0]  直接看数组找数值为:x
(1)*(**arrary + 1) 用语法糖表示则为:array[0][0][1]  直接看数组找数值为:x
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 07:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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