gpt4 book ai didi

c++ - 关于 C++ 中的指针和数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:24 24 4
gpt4 key购买 nike

我想问一个关于C++中指针和数组的问题。

int a[10];

int *p1; p1 = &a[0];

int *p2; p2 = a;

int (*p3)[10]; p3 = &a;

p1、p2、p3 有什么区别?它们非常困惑。

最佳答案

首先,a 是一个包含 10 个 int 的数组。这是简单的部分。

p1 是“指向int 的指针”。您正在为其分配 &a[0] 的值。这采用 a 的第一个元素的地址。所以 p1 现在指向 a 的第一个元素。

p2 也是“指向int 的指针”。您正在将 a 直接分配给它。在这种情况下,必须进行称为数组到指针转换的标准转换。基本上,数组可以转换为指向其第一个元素的指针。您正在将此转换的结果分配给 p2。所以 p2 也是指向 a 的第一个元素的指针。

p3 是“指向 10 个 int 数组的指针”。您正在获取数组 a 的地址并将其分配给此指针。所以现在这个指针指向数组本身(不是它的第一个元素)。

您可能会想“嗯,第一个元素与数组的地址相同,那有什么区别呢?”事实上,当您尝试递增指针时,您会注意到差异。递增 p1p2 将为您提供指向数组第二个元素的指针。递增 p3 将为您提供指向下一个 10 个 int 数组的指针(实际上并不存在)。

┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ int │ int │ int │ int │ int │ int │ int │ int │ int │ int │
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
^
└── p1, p2, p3

因此,如果您按照您的描述从所有指向开始,然后递增它们,您将得到:

┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬┄
│ int │ int │ int │ int │ int │ int │ int │ int │ int │ int │
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴┄
^ ^
└── p1, p2 └── p3

关于c++ - 关于 C++ 中的指针和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15839614/

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