基于指针的查询

时间:2016-01-02 17:25:26

标签: c++ pointers

#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。 有人可以解释一下解决方案吗? 提前致谢

3 个答案:

答案 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;
}