[课后作业] S1E24:指针和二维数组t4
#include <stdio.h>int main()
{
char array = {
{
{'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;
}
三维真不会,有人能帮忙解释一下吗,感谢 只要把 3 层括号补齐,很好办的:
*(*(*array + 1) + 2) = * ( * ( * (array + 0) + 1) + 2) = array
*(*(*(array + 1) + 1) + 2) = array
***array = * (* (* (array + 0) + 0) + 0) = array
*(**array + 1) = * (* (* (array + 0) + 0) + 1) = array
本帖最后由 人造人 于 2021-12-17 00:37 编辑
对于这类问题,真的不需要较真
这类问题记住一个规则就可以了,然后用这个规则一直往下替换
规则:数组的名字是数组第0个元素的地址
*(*(*array + 1) + 2)
array 替换成 &array
*array -> *&array -> array -> &array
*array + 1 -> &array + 1 -> &array
*(*array + 1) -> *&array -> array -> &array
*(*array + 1) + 2 -> &array + 2 -> &array
*(*(*array + 1) + 2) -> *&array -> array
也就是说 *(*(*array + 1) + 2) 就是 array
这类问题建议是学了汇编语言以后,再研究这个
站在汇编语言的角度,你可以看到更多的东西
你可以看这样的代码在汇编语言层是怎么处理的
这道题用语法糖,很好理解,可以参考:什么是语法糖
(1)*(*(*arrary + 1)+2) 用语法糖表示则为:array直接看数组找数值为:o
(2)*(*(*(arrary + 1) + 1)+2) 用语法糖表示则为:array直接看数组找数值为:o
(3)***arrary 用语法糖表示则为:array直接看数组找数值为:x
(1)*(**arrary + 1) 用语法糖表示则为:array直接看数组找数值为:x
页:
[1]