2015-04-29 109 views
1
#include<stdio.h> 

int main() 
{ 
    int a[] = {10, 20, 30, 40, 50}; 
    int *b = a - 1; 

    printf("%d \n",*(a+2)); 
} 

我知道它打印的30a[2]相同,但是怎么样? a - 1对数组a[]做什么?有人可以解释这段代码发生了什么?

+1

你没有使用'b'变量,因此整行可以被忽略... – ericbn

回答

4

a - 1不改变a,就像3 + 2不改变3一样。

此代码会导致未定义的行为,因为a - 1会尝试在a的范围外形成指针。但在实践中它是可能的b线将刚刚被忽略,所以你的代码的行为一样:

int a[] = {10, 20, 30, 40, 50}; 
printf("%d \n",*(a+2)); 

当然版画其中30

+0

好的。所以,打印'*(a + 2)'和'a [2]'没有区别,对吧?就像打印'* a','*(a + 1)','*(a + 2)','*(a + 3)'和'a [0]','a [1] ','a [2]','a [3]'...是一样的吗? – Ishtiaq

+0

@Ishtiaq是'x [y]'被定义为'*(x + y)'。 –

+0

好的。谢谢@Matt! – Ishtiaq

相关问题