我是C编程的新手,并试图理解指针算法的工作原理。当printf的参数为*(p + 2)且4为* p时,下面的printf语句打印2。你能解释一下这种行为吗?
#include <stdio.h>
#include <conio.h>
int main()
{
int arr[4] = {4,3,2,1}, *p = arr;
printf("\n%d", *(p+2));
return 0;
}
答案 0 :(得分:1)
让我们重新编写你的程序,让它更清晰一点:
#include<stdio.h>
int main(void)
{
int arr[4] = {4,3,2,1};
int *p = arr;
printf("\n%d", *(p+2));
return 0;
}
现在,*(p+2)
定义与p[2]
相同。由于p
指向arr
的第一个元素,因此p[2]
与arr[2]
相同,等于2
。
同样,*(p)
与*p
相同,并且p
指向arr
的第一个元素,然后*(p)
为4
。
您可能需要重新阅读教科书中涵盖指针算术的部分。