#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不会改变a,就像3 + 2不会改变3一样。
此代码导致未定义的行为,因为a - 1试图在a的边界之外形成指针。但实际上,很可能会忽略b行,因此代码的行为与:

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

当然会打印30

10-07 20:00
查看更多