#include<stdio.h>
int main()
{
int a[] = {10, 20, 30, 40, 50};
int *b = a - 1;
printf("%d n",*(a+2));
}
我知道它打印的30
与a[2]
相同,但是如何打印呢?a - 1
对阵列a[]
做什么?
a - 1
不会改变a
,就像3 + 2
不会改变3
一样。
此代码会导致未定义的行为,因为a - 1
尝试在 a
边界之外形成指针。但实际上,b
行很可能会被忽略,因此您的代码的行为与以下内容相同:
int a[] = {10, 20, 30, 40, 50};
printf("%d n",*(a+2));
这当然打印30
.