C++ 某些类别**ptr之间的差异;和一些类*ptr;
很抱歉,这似乎是一个新手问题,但这对谷歌来说是一个真正的痛苦。我用C++,而我可以通过指针和引用对我来说有时很神秘。p>C++ 某些类别**ptr之间的差异;和一些类*ptr;,c++,c,C++,C,很抱歉,这似乎是一个新手问题,但这对谷歌来说是一个真正的痛苦。我用C++,而我可以通过指针和引用对我来说有时很神秘。p> 我有一些代码,类似于SomeClassName**指针,我想知道为什么有两个星号而不是一个?SomeClassName**指针表示“指向SomeClassName”的指针,而SomeClassName*指针表示“指向SomeClassName对象的指针” 希望这会有所帮助,它是一个。也许这会帮助您理解它:指针只是一个指向内存中某个位置的数字。通常,内存中有你的对象。但在这种情
我有一些代码,类似于
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()中声明的变量?希望这很清楚。回答得很好,这就澄清了我的下一个问题,即这是如何有用的。我正在阅读的代码更有意义,谢谢!