带你学C带你飞-指针与二维数组-课后第4题
#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;
}
答案是00xx,我之前接触的array[][]只有2个角标,为什么这段有3个角标?与此同时,*(*(*(array + 1) + 1) + 2)是什么意思?***array这个为什么要有这么多指针角标?*(**array + 1)这个也是为什么有这么多指针角标? 这段代码使用了一个三维数组来存储字符数据。三维数组可以看作是一个由多个二维数组组成的数组。在这个例子中, array 是一个由两个二维数组组成的数组。
array 表示一个包含两个二维数组的数组,每个二维数组有3行5列。
*(*(*array + 1) + 2) 的意思是取 array 数组中第一个二维数组的第二行的第三个元素,即'o'。
*(*(*(array + 1) + 1) + 2) 的意思是取 array 数组中第二个二维数组的第二行的第三个元素,即'o'。
***array 的意思是取 array 数组中第一个二维数组的第一行的第一个元素,即'x'。
*(**array + 1) 的意思是取 array 数组中第一个二维数组的第一行的第二个元素,即'x'。
因此, printf 语句输出的结果是"00xx"。 解答:
在这段代码中,array是一个二维数组,它有三个维度,分别是2、3和5。因此,我们可以通过三个角标来访问数组中的元素。
下面解释一下每个指针角标的含义:
1. *(*(*array + 1) + 2):首先,array本身就是一个指向二维数组的指针。*array表示取这个指针指向的二维数组的第一个维度,即array。接着,*(*array + 1)表示取array中的第二个维度,即array。最后,*(*(*array + 1) + 2)表示取array中的第三个维度,即array。所以,*(*(*array + 1) + 2)的值为'o'。
2. *(*(*(array + 1) + 1) + 2):*(array + 1)表示取array中的第二个维度,即array。*(*(array + 1) + 1)表示取array中的第二个维度,即array。最后,*(*(*(array + 1) + 1) + 2)表示取array中的第三个维度,即array。所以,*(*(*(array + 1) + 1) + 2)的值为'o'。
3. *array:*array表示取array中的第一个维度,即array。由于array是一个字符数组,所以*array表示取array的第一个元素,即array。所以,*array的值为'x'。
4. *(array + 1):首先,array表示取array中的第一个维度,即array。而*(*array + 1)表示取array中的第二个维度,即array。最后,*(array + 1)表示取array的第一个元素,即array。所以,*(array + 1)的值为'x'。
根据上面的解释,代码输出的结果应该是"00xx"。
如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}
在这段代码中,array是一个三维字符数组,它有两个维度、三行和五列。每个元素都是一个char类型的字符。
现在我们来解释一下代码中的每个部分:
*(*(*array + 1) + 2)
首先,array是一个指向三维字符数组的指针。解引用array一次得到二维字符数组array。再次解引用得到一维字符数组array。最后,第三次解引用得到字符array,这个字符是'x'。
类似地,*(*(*(array + 1) + 1) + 2)解析如下:
· array + 1表示偏移一个单位,指向array。
· *(array + 1)解引用得到array,也就是二维字符数组中的第二行。
· *(array + 1) + 1表示二维字符数组中的第二行偏移一个单位,指向array。
· *(*(array + 1) + 1)解引用得到array,也就是字符'o'。
· *(*(array + 1) + 1) + 2表示字符'o'偏移两个单位,指向字符'x'。
另外,***array解析如下:
· *array表示指向三维字符数组中的第一个二维字符数组的指针,也就是array。
· **array解引用得到第一个二维字符数组的第一行,也就是array。
· ***array解引用得到第一个二维字符数组的第一行的第一个字符,也就是字符'x'。
最后,*(**array + 1)解析如下:
· **array表示指向第一个二维字符数组的第一行的指针,也就是array。
· *(**array + 1)解引用得到第一个二维字符数组的第一行的第二个字符,也就是字符'x'。
因此,打印语句 printf("%c%c%c%c\n", *(*(*array + 1) + 2), *(*(*(array + 1) + 1) + 2), ***array, *(**array + 1)); 的输出结果是 00xx。
如果问题已经解决,请设置最佳答案
页:
[1]