我们先来看一个例子:
int a=0;
int *b=&a;
假设我们有第三个变量时:
c=&b;
c的类型显然是一个指针,变量b是一个”指向整形的指针”,所以任何指向b的类型必须是指向“指向的指针”的指针,更通俗的来讲就是指针的指针。
它合法吗?
指针变量和其他变量一样,占据内存中某个特定的位置,所以用&操作符取得他的地址是合法的。
这个变量声明为:
int **c;
所以将他们写在一起,将会是这样的:
int a=0;
int *b=&a;
int **c=&b;
我们知道*操作符具有从右向左的结合性,所以,这个表达式相当于*(*c),我们必须从外向内逐层求解。
当然,我们要进一步学习关于二级指针的知识,单单到这一程度是完全不够的,我们需要一些更加通用的例子来了解它。
例:
int i;
int *pi;
int **ppi;
那么有了上面这些信息之后,我们来看一些语句
ppi=π
这条语句把ppi初始化指向变量pi。以后我们就可以安全的对ppi执行间接访问操作了。
*ppi=&i;
这条语句把pi(通过ppi间接访问)初始化指向变量i,接下来后,下面这些语句将会有相同的效果:
i=‘a’;
*pi=‘a’;
**ppi=‘a’;