gpt4 book ai didi

c - 我如何可视化后递增指针的概念?

转载 作者:太空狗 更新时间:2023-10-29 15:18:32 24 4
gpt4 key购买 nike

指针是指向内存中某个位置的变量。

int *pointer1;
int *pointer2 = pointer1;

假设两个变量都指向内存位置

0xA

然后我表演

pointer2++;

现在,pointer2 指向

0xB

因为两个地址都指向同一个地方,所以我完全希望pointer1指向

0xB

但事实并非如此。 pointer1 仍然指向 0xA

这怎么可能?指针是否有另一个地址来指定它实际上是哪个指针?如果是,第二个地址叫什么?

最佳答案

您将存储在指针中的值与指针指向的值混淆了。

这两个指针本身是完全独立的,它们只是恰好指向同一个内存位置。当你写作时

pointer2++;

您正在递增 存储在 pointer2 中的值(即它指向的地址),而不是存储在指向位置的值;作为 pointerpointer2 独立变量,没有理由 pointer 也应该改变它的值。


更直观:

int var=42;
int * ptr1 = &var;
int * ptr2 = ptr2;

假设 var 存储在内存位置 0x10,我们会遇到这种情况:

+----------+
| | 0x00
+----------+
| | 0x04
+----------+
| | 0x08 +------------+
+----------+ +------| ptr1: 0x10 |
| | 0x0C | +------------+
+----------+ | +------------+
| var: 42 | 0x10 <----+------| ptr2: 0x10 |
+----------+ +------------+
| | 0x14
+----------+
| | 0x18
+----------+
| |

现在我们增加 ptr2

ptr2++;

(由于指针运算,存储的地址增加了 sizeof(int),这里我们假设为 4)

+----------+
| | 0x00
+----------+
| | 0x04
+----------+
| | 0x08 +------------+
+----------+ +------| ptr1: 0x10 |
| | 0x0C | +------------+
+----------+ | +------------+
| var: 42 | 0x10 <----+ +--| ptr2: 0x14 |
+----------+ | +------------+
| | 0x14 <--------+
+----------+
| | 0x18
+----------+
| |

现在 ptr2 指向 0x14(在这个例子中是什么并不重要); ptr1 保持不变,指向 0x10。

(自然地,ptr1ptr2 都有一个存储它们的地址,就像任何其他变量一样;为了清楚起见,这没有在图中显示)

关于c - 我如何可视化后递增指针的概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5810827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com