#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[]
做什么?有人可以解释这段代码发生了什么?
#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
。
你没有使用'b'变量,因此整行可以被忽略... – ericbn