我需要在执行以下代码后找到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的值,因此我变为3。
在下一行:
*q = *p + 3;
j变为6。
我不确定下一行会发生什么:
p = q;
我认为这意味着:“i的地址等于j的地址”。我不知道在这种情况下i和j的最终值是什么。你能帮我理解发生了什么吗?
答案 0 :(得分:7)
想象一下,在p
和q
的初始初始化之后,你的记忆就像这样:
+---+ +---+ | p | --> | i | +---+ +---+ +---+ +---+ | q | --> | j | +---+ +---+
完成后
p = q;
它看起来像这样:
+---+ | p | --\ +---+ \ +---+ >--> | j | +---+ / +---+ | q | --/ +---+
答案 1 :(得分:3)
p = q;
这仅表示现在p
指向q
所指向的同一事物,即j
。