在以下程序片段的上下文中,选择最佳答案。
#include "stdio.h"
int arr[10][10][10];
int main()
{
arr[5][5][5] = 123;
return 0;
}
给定的哪个printf语句将能够打印arr [5] [5] [5]
(i) printf("%d",arr[5][5][5]);
(ii) printf("%d",*(*(*(arr+5)+5)+5));
(iii) printf("%d",(*(*(arr+5)+5))[5]);
(iv) printf("%d",*((*(arr+5))[5]+5));
(A)只有(i)会编译并打印123。
(B) (i)和(ii)都将编译并且都将打印123。
(C)仅(i),(ii)和(iii)会编译,但只有(i)和(ii)会打印123。
(D)仅(i),(ii)和(iii)会编译,而所有三个将打印123。
(E)所有(i),(ii),(iii)和(iv)都会编译,但只有(i)和(ii)会打印123。
所有(i),(ii),(iii)和(iv)都将被编译,并且全部将打印123。回答:
说明:对于数组,我们可以将数组下标运算符[]转换为具有适当偏移量的指针引用运算符*。这意味着arr [x]等于*(arr + x)。基本上,这两个是可以互换的。同样的概念也可以应用于多维数组。
这就是为什么上述所有4个printf都引用相同的元素,即arr [5] [5] [5]
这个问题的测验
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。