C指针有问题

时间:2017-07-16 00:51:21

标签: c pointers

在此代码中:

#include <stdio.h>
int fun (int *x, int i) {
 int r;
 printf("%d\n", *(x+i/2));
 r = *x + i / 2 + *(x + i / 2);
 return r;
}
int main (void) {
 int x[] = {8, 7, 6, 5, 4, 3, 2, 1};
 printf("%d", fun(x, 7));
 return 0;
}

我无法理解,为什么*(x + i / 2)= 5?

1 个答案:

答案 0 :(得分:0)

*(x)将是数组的第一个元素,8 *(x+i/2) == *(x+7/2) == *(x+3) == x[3] == 5

请注意
a)整数除法(舍入)
b)指针算术,*(x+1)正在查看第二个数组条目,而不是第二个字节