|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
答案是00xx,我之前接触的array[][]只有2个角标,为什么这段有3个角标?与此同时,*(*(*(array + 1) + 1) + 2)是什么意思?***array这个为什么要有这么多指针角标?*(**array + 1)这个也是为什么有这么多指针角标?
在这段代码中, array是一个三维字符数组,它有两个维度、三行和五列。每个元素都是一个 char类型的字符。
现在我们来解释一下代码中的每个部分:
首先, array是一个指向三维字符数组的指针。解引用 array一次得到二维字符数组 array[0]。再次解引用得到一维字符数组 array[0][0]。最后,第三次解引用得到字符 array[0][0][0],这个字符是 'x'。
类似地, *(*(*(array + 1) + 1) + 2)解析如下:
· array + 1表示偏移一个单位,指向 array[1]。
· *(array + 1)解引用得到 array[1],也就是二维字符数组中的第二行。
· *(array + 1) + 1表示二维字符数组中的第二行偏移一个单位,指向 array[1][1]。
· *(*(array + 1) + 1)解引用得到 array[1][1],也就是字符 'o'。
· *(*(array + 1) + 1) + 2表示字符 'o'偏移两个单位,指向字符 'x'。
另外, ***array解析如下:
· *array表示指向三维字符数组中的第一个二维字符数组的指针,也就是 array[0]。
· **array解引用得到第一个二维字符数组的第一行,也就是 array[0][0]。
· ***array解引用得到第一个二维字符数组的第一行的第一个字符,也就是字符 'x'。
最后, *(**array + 1)解析如下:
· **array表示指向第一个二维字符数组的第一行的指针,也就是 array[0][0]。
· *(**array + 1)解引用得到第一个二维字符数组的第一行的第二个字符,也就是字符 'x'。
因此,打印语句 printf("%c%c%c%c\n", *(*(*array + 1) + 2), *(*(*(array + 1) + 1) + 2), ***array, *(**array + 1)); 的输出结果是 00xx。
如果问题已经解决,请设置最佳答案
|
|