C:无法理解这个程序中的指针

The*_*eIt -1 c variables pointers

我需要在执行以下代码后找到i和j的值:

int i = 2;
int j = 2;
int *p = &i;
int *q = &j;
i++;
j--;
*p = *q + 2;
*q = *p + 3;
p=q;
*p = *q + 1;
Run Code Online (Sandbox Code Playgroud)

让我来描述一下我认为在这段代码中发生的事情.在第三和第四行:

int *p = &i;
int *q = &j;
Run Code Online (Sandbox Code Playgroud)

指针p和q分别初始化为i和j的地址.在第5和第6行:

i++;
j--;
Run Code Online (Sandbox Code Playgroud)

i变为3,j变为1.这使*p为3,*q为1.

在第7行,

*p = *q + 2
Run Code Online (Sandbox Code Playgroud)

表示p指向的值等于q指向加号2的值,因此i变为3.

在下一行:

*q = *p + 3;
Run Code Online (Sandbox Code Playgroud)

j变为6.

我不确定下一行会发生什么:

p = q;
Run Code Online (Sandbox Code Playgroud)

我认为这意味着:"i的地址等于j的地址".我不知道在这种情况下i和j的最终值是什么.你能帮我理解发生了什么吗?

Som*_*ude 7

试想一下,你的记忆是这样的初始初始化后pq:

+---+     +---+
| p | --> | i |
+---+     +---+

+---+     +---+
| q | --> | j |
+---+     +---+

你做完之后

p = q;
Run Code Online (Sandbox Code Playgroud)

它看起来像这样:

+---+
| p | --\
+---+    \     +---+
          >--> | j |
+---+    /     +---+
| q | --/
+---+