c语言 - 有人可以解释一下这段代码发生了什么吗?


#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[]做什么?

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

此代码会导致未定义的行为,因为a - 1尝试在 a 边界之外形成指针。但实际上,b行很可能会被忽略,因此您的代码的行为与以下内容相同:

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

这当然打印30.

最新更新