关于C语言的简单问题

main()
{int arr[ ]={30,25, 20, 15, 10, 5}, p=arr;
p++;
printf ("%d", (p+3))

这个程序的输出结果是多少,最好能解释一下

p = arr,指向数组首地址,也就是 30元素所在的地址;
p++,指针往后移动一位 ,到 25所在的地址
然后 p + 3,指针又往后移动 三位,到 10 所在的地址,
你这里应该缺少了 星号, 即 *(p + 3) 这个对应 的值为 10,所以输出 10

这个程序会输出一个地址,而不是数组中的值(你的声明还有点错,应该是*p=arr;)。
首先,在C语言中,数组名可以被视为指向该数组第一个元素的指针。因此,在这个程序中,arr指向数组的第0个元素(30的地址)。
然后,p被声明为一个整数,但是由于它被初始化为指向arr的指针,因此它实际上是一个指针变量。
在第3行中,p被递增,指向数组中的下一个元素,即25的地址。因此,p+3指向数组中的第4个元素,即10的地址。但是,由于它只是一个指针,因此在输出时它会被解释为一个地址,并打印在屏幕上。
因此,这个程序的输出结果是元素10的地址值。