#include<iostream.h>
void main()
{
int arr[2][3][2]={{{2,4},{7,8},{3,4},}, {{2,2},{2,3},{3,4}, }};
cout<<**(*arr+1)+2+7;
}
根据我的回答将是11,但编译器显示16。 有人可以解释一下解决方案吗? 提前致谢
答案 0 :(得分:2)
*arr
相当于arr[0]
。
*(arr[0]+1)
相当于arr[0][1]
。
*arr[0][1]
相当于arr[0][1][0]
。
所以,你的代码等同于:
#include<iostream.h>
void main()
{
int arr[2][3][2]={
{{2,4},{7,8},{3,4},},
{{2,2},{2,3},{3,4},}
};
cout << arr[0][1][0]+2+7;
}
arr[0][1][0]
是7,所以你得到7 + 2 + 7,即16。
答案 1 :(得分:2)
**(*arr + 1) + 2 + 7
与
相同**(arr[0] + 1) + 2 + 7
与
相同arr[0][1][0] + 2 + 7
arr[0][1][0]
根据定义是7。
所以编译器是正确的,答案是16。
答案 2 :(得分:0)
其他答案都是正确的。尝试在您的代码中执行此操作,以便自己查看它:
#include <iostream>
int main()
{
int arr[2][3][2]=
{
{
{2,4},{7,8},{3,4},
},
{
{2,2},{2,3},{3,4},
}
};
std::cout << *arr << std::endl; // 0x7fff5a3a6710
std::cout << *arr+1 << std::endl; // 0x7fff5a3a6718
std::cout << *(*arr+1) << std::endl; // 0x7fff5a3a6718
std::cout << **(*arr+1) << std::endl; // 7
std::cout << **(*arr+1)+2+7 << std::endl; // 16
return 0;
}