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

标签 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;

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

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 的最终值是什么。你能帮我理解发生了什么吗?

最佳答案

想象一下,在pq初始初始化之后,你的内存看起来像这样:

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

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

After you do

p = q;

它看起来像这样:

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

关于C:无法理解该程序中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26345503/

相关文章:

c - 各种值的固定点。 UC皮质

c -++*p++ 无法理解优先级的事情

c - 如何在 C 中将整数数组从 0 标准化为 10

java - 我可以将列表中的每个元素分配给单独的变量吗?

javascript - 如果 b = a,为什么在下一行重新定义 a 后 b 会发生变化?

c - 在 C 中尝试过的简单文件复制代码?

c - 使用 const 代替变量声明的空指针

C编程: dereferencing pointers

c - 使用 C 返回数组

c++ - 关于 C++ 指针