首页 > 解决方案 > 指针和数组练习题

问题描述

我正在自学 C 编程,并坚持这种做法

int a[] = {5,7,9,11,13};
int *p;
int i = 2;
p = a;
*(p++) = ++i;
printf("%d %d %d %d", a[0], a[i++], *p, *(p+2));
// output: 3 11 7 11

我的理解是

1.定义一个数组a并用值5,7,9,11,13初始化它

2.定义指针p

3.定义i并用值2初始化它

4.p指向数组a

5.p[1] = 3;

  1. a[0] = 5, a[3] = 11, *p = p[0] = 5, *(p+2) = p[2] = 9

//输出:5 11 5 9

但他们完全错了!

我可能需要对此进行详细解释。

请帮助我,非常感谢!

标签: c

解决方案


你的理解是正确的,直到 3 点。

4 -p指向 的第一个元素a

5 - 您正在使用后增量运算符。Sop的旧值将被使用并p递增(意味着p现在将指向 中的第二个元素a)。所以这相当于p[0] = i + 1; p = p + 1; i = i + 1; 此时p是指向第二个元素,a而第一个元素a变成了3i也是3在这一点上。

  1. a[0] = 3, a[i++] = a[3] = 11, *p = a[1] = 7, *(p+2) = a[3] = 11.

这正是您得到的输出 - 请参见此处


推荐阅读