gpt4 book ai didi

c++ - SomeClass **ptr; 之间的区别和 SomeClass *ptr;

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:30 26 4
gpt4 key购买 nike

抱歉,这看起来像是一个菜鸟问题,但对 Google 来说却是一个真正的痛苦。我正在使用 C++,虽然我可以通过指针和引用获得,但有时对我来说仍然很神秘。

我有一些代码,类似于 SomeClassName **pointer,我想知道为什么有两个星号而不是一个?

最佳答案

用图片来解释要容易得多,但我们还是试一试。如果您已经知道其中的一些内容,我们深表歉意。

指针只是一个保存值的变量,就像 int 或 char 一样。使它成为指针的原因是该变量中的值是其他地方内存中的地址。

示例更简单。假设我们有 3 个这样声明的变量:

int iVar = 42;  // int
int *piVar = &iVar; // pointer to an int
int **ppiVar = &piVar; // pointer to (pointer to an int)

我们的内存可能是这样的:

Address     Name          Value
0x123456 iVar 42
0x12345A piVar 0x123456
0x12345E ppiVar 0x12345A

所以,您知道可以像这样取消引用 piVar:

*piVar = 33;

并改变iVar的值

Address     Name          Value
0x123456 iVar 33
0x12345A piVar 0x123456
0x12345E ppiVar 0x12345A

你可以用 ppiVar 做同样的事情:

*ppiVar = NULL;

Address Name Value
0x123456 iVar 33
0x12345A piVar 0
0x12345E ppiVar 0x12345A

由于指针仍然只是一个变量,我们使用 * 更改了地址处的值。

为什么?一个应用程序是从函数分配内存:

void MyAlloc(int **ppVar, int size)
{
*ppVar = (int *)malloc(size);
}

int main()
{
int *pBuffer = NULL;

MyAlloc(&pBuffer, 40);
}

看看我们如何解引用指针以获取在 main() 中声明的变量?希望这是相当清楚的。

关于c++ - SomeClass **ptr; 之间的区别和 SomeClass *ptr;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8066698/

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