2 个*号,声明指向指针的指针。它的意思是“它是一个整数,这个整数指向某个内存地址,一次访问sizeof(int)长度,其值是一个整数,那个整数值指向某个内存地址,一次访问sizeof(BTree)长度。
指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。
扩展资料
在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。
意思是通过它能找到以它为地址的内存单元。 在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。
作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。
在信息工程中指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中寄存器(Register)【用来指向该内存地址所对应的变量或数组】。指针一般出现在比较接近机器语言的语言,如汇编语言或C语言。面向对象的语言如Java一般避免用指针。
指针一般指向一个函数或一个变量。在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的函数的值。
另外,指针也指钟表中用来指示对应时间的部件。
参考资料来源:百度百科-二级指针
把两颗星看做一个整体符号吧,一个星的指针存放的是变量的地址。两颗星的指针存放的是指针的地址,这样理解一下。
举例:int i=5;
int *p=&i;
int **q=&p;
此时,一级指针p存放的是变量i的地址,通过p可以从地址层上操作i。
其次,二级指针q存放的是指针变量p的地址,通过q可以从地址层上去改变p的值,改变的p的值意味着什么?意味着p的指向发生了改变。
常见的情况用在二维数组比较多。但在com编程中其实也经常见到,最常用的一个com函数: HRESULT QueryInterface( REFIID iid, void** ppvObject); //也就是QI
例子看下即可,com你可能还没接触。
void Test(IUnknown* pI)
{
// 定义一个接口指针
IM* pIM = NULL;
// 查询接口IM
HRESULT hr = pI->QueryInterface(IID_IM, (void**)&pIM);
if (SUCCEEDED(hr))
{
// 通过接口调用函数
pIM->Fun();
}
}
两颗星的指针可能对于初学者有些迷茫,但翻阅国外一些教程,特别是游戏类的,指针能用到4星、5星也不为怪的,呵呵,不要被他所吓倒,工具嘛,用用总会熟练的。
指针的指针,也就是说,二维指针p指向的是一个指针(也就是地址)。在数组中的例子就是,一维数组的数组名是一个指针,也是这个数组的起始地址;那么,二维数组的数组名就是一个指针数组的首地址(这个指针数组的每个元素是一个指针,也可以看做是一维数组),二维数组就是数组的数组嘛!这时,*p代表这个指针数组的首元素,也就是一个一维指针;**p代表这个一维指针指向的数据。
指向指针的指针。
**=脑婆或脑公,是有科学依据,由于一些特殊场合,这两种称呼不便说出,所以就用这两个符号代替