int a = 12;
int *b = &a;
现在有了第三个变量c
c = &b;
c的类型是什么?显然它是一个指针,但它所指向的是什么?变量b是一个“指向整型的指针”,所以任何指向b的类型必须是指向“指向整型的指针”的指针,更通俗地说,是一个指针的指针。
它合法吗?是的!指针变量和其他变量一样,占据内存中某个特定的位置,所以用&操作符取得它的地址是合法的,那么这个变量是怎样声明的呢?声明
int **c;
表示表达式**c的类型是int。下表列出了一些表达式,有助于我们弄清这个概念。假定这些表达式进行了如下这些声明。
int a = 12;
int *b = &a;
int **c = &b;
*
操作符具有从右向左的结合性,所以这个表达式相当于*(*c)
,我们必须从里向外逐层求值。*c
访问c所指向的位置,我们知道这是变量b。第2个间接访问操作符访问这个位置所指向的地址,也就是变量a。
表达式 | 相当的表达式 |
---|---|
a | 12 |
b | &a |
*b | a, 12 |
c | &b |
*c | b, &a |
**c | *b, a, 12 |