执行以下代码后,我需要找到 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;
让我描述一下我认为这段代码中发生的情况。 在第三行和第四行中:
int *p = &i;
int *q = &j;
指针 p 和 q 分别初始化为 i 和 j 的地址。 第 5 行和第 6 行:
i++;
j--;
i 变为 3,j 变为 1。这会导致 *p 为 3,*q 为 1。
第 7 行,
*p = *q + 2
表示p指向的值等于q指向的值加上`2,所以i变成3。
在下一行:
*q = *p + 3;
j 变为 6。
我不确定下一行会发生什么:
p = q;
我认为这意味着:“i 的地址等于 j 的地址”。我不知道在这种情况下 i 和 j 的最终值是什么。你能帮我理解发生了什么吗?
最佳答案
想象一下,在p
和q
初始初始化之后,你的内存看起来像这样:
+---+ +---+ | p | --> | i | +---+ +---+ +---+ +---+ | q | --> | j | +---+ +---+
After you do
p = q;
它看起来像这样:
+---+ | p | --\ +---+ \ +---+ >--> | j | +---+ / +---+ | q | --/ +---+
关于C:无法理解该程序中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26345503/