Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 某些类别**ptr之间的差异;和一些类*ptr;_C++_C - Fatal编程技术网

C++ 某些类别**ptr之间的差异;和一些类*ptr;

C++ 某些类别**ptr之间的差异;和一些类*ptr;,c++,c,C++,C,很抱歉,这似乎是一个新手问题,但这对谷歌来说是一个真正的痛苦。我用C++,而我可以通过指针和引用对我来说有时很神秘。p> 我有一些代码,类似于SomeClassName**指针,我想知道为什么有两个星号而不是一个?SomeClassName**指针表示“指向SomeClassName”的指针,而SomeClassName*指针表示“指向SomeClassName对象的指针” 希望这会有所帮助,它是一个。也许这会帮助您理解它:指针只是一个指向内存中某个位置的数字。通常,内存中有你的对象。但在这种情

很抱歉,这似乎是一个新手问题,但这对谷歌来说是一个真正的痛苦。我用C++,而我可以通过指针和引用对我来说有时很神秘。p>
我有一些代码,类似于
SomeClassName**指针
,我想知道为什么有两个星号而不是一个?

SomeClassName**指针
表示“指向
SomeClassName
”的指针,而
SomeClassName*指针
表示“指向
SomeClassName
对象的指针”


希望这会有所帮助,

它是一个。

也许这会帮助您理解它:指针只是一个指向内存中某个位置的数字。通常,内存中有你的对象。但在这种情况下,它只是有另一个数字,它指的是内存中的另一个地方,它最终拥有了你感兴趣的对象。这可能会导致荒谬;您可以使用
一些CLASName****指针。

用图片解释要容易得多,但我们会尝试一下。如果你已经知道其中一些,我会道歉

指针只是一个保存值的变量,就像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 = 33;
所以,你知道你可以像这样取消对piVar的引用:

Address     Name          Value
0x123456    iVar          42
0x12345A    piVar         0x123456
0x12345E    ppiVar        0x12345A
*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()中声明的变量?希望这很清楚。

回答得很好,这就澄清了我的下一个问题,即这是如何有用的。我正在阅读的代码更有意义,谢谢!