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星也不为怪的,呵呵,不要被他所吓倒,工具嘛,用用总会熟练的。
那意思就是,有一个数组a[i]={1,2,3,4,5,·····} 指针**p,p=a[0】,这个**p就是指向a[0]和a[1]的值,结果**p=a[1]吗?这才是最终结果吗?
int a[i]={1,2,3,4,5,·····} l;
int **p;
*p = a; 对
*p = &a[0]; 对
**p = a[0]; 对
p=a[0];语法没错,但是会有警告,因为这样做表明你还不懂指针。