print语句的输出是什么?

时间:2015-08-29 15:27:58

标签: c arrays pointers

输出不应该是6,因为它应该打印B [0] [2]? 输出结果是4.这是B [1] [0]

main()
{    
    int B[2][3]={2,3,6,4,5,8};
    printf("%d",**B+2);
}

4 个答案:

答案 0 :(得分:5)

**B+2相当于(**B) + 2

**B等于数组B[0][0] 2

因此看到了输出。

如果您需要6,您需要的是*(*B + 2)

有关此herehere

的更多信息

答案 1 :(得分:4)

请记住,取消引用运算符的值比precedence高,因此您的表达式等同于(**B) + 2。换句话说,当您取消引用两次时,会得到B[0][0],即2,然后您添加2,从而导致最终结果4

如果您需要B[0][2],那么您应该*(*B + 2)

答案 2 :(得分:3)

没有括号。所以首先首先获取第一个元素的值,然后将2添加到它,因此输出为2 + 2 = 4且不是B [1] [0]。当我们使用括号*(* B + 2)时,它首先递增B的地址然后取其值。因此它将是B [0] [2]。

答案 3 :(得分:0)

这是优先事项。请尝试如下:

#include <stdio.h>
int main()
{    
    int B[2][3]={2,3,6,4,5,8};
    printf("%d",*(*B+2));
}