参考: C 指向指针的指针
指向指针的指针是一种多级间接寻址的形式, 或者说是一个指针链. 通常, 一个指针包含一个变量的地址. 当我们定义一个指向指针的指针时, 第一个指针包含了第二个指针的地址, 第二个指针指向包含实际值的位置.
一个指向指针的指针变量必须如下声明, 即在变量名前放置两个星号. 例如, 下面声明了一个指向 int 类型指针的指针:
int **var;
当一个目标值被一个指针间接指向到另一个指针时, 访问这个值需要使用两个星号运算符, 如下面实例所示:
var:int 变量
ptr: 指向 var 的指针
pptr: 指向 ptr 的指针
表示 var 值的三种方法:
var
*ptr:ptr 指针所对应的值, 即 var
**pptr:*pptr 指针所对应的值, 即 ptr, 所以 **pptr = *ptr = var
表示 ptr 值 (var 地址, pptr 对应的值) 的四种方法:
&var: 表示 var 的地址, 即 ptr
ptr
&(*ptr):*ptr 相当于 var
*pptr:*pptr 指针所对应的值, 即 ptr, 所以 *pptr = ptr = &var
表示 pptr 值 (ptr 地址) 的三种方法:
&ptr: 表示 ptr 的地址, 即 pptr
pptr
&(*pptr):*pptr 相当于 ptr
表示 pptr 地址的方法:
- &pptr
- #include <stdio.h>
- int main() {
- int var;
- int *ptr;
- int **pptr;
- var = 3000;
- ptr = &var;
- pptr = &ptr;
- printf("Value of var = %d\n", var );
- printf("Value available at *ptr = %d\n", *ptr );
- printf("Value available at **pptr = %d\n", **pptr);
- printf("\n");
- printf("Address of var: &var = %p\n", &var);
- printf("Address of var: ptr = %p\n", ptr);
- printf("Address of var: &(*ptr) = %p\n", &(*ptr));
- printf("Address of var: *pptr = %p\n", *pptr);
- printf("\n");
- printf("Address of ptr: &ptr = %p\n", &ptr);
- printf("Address of ptr: pptr = %p\n", pptr);
- printf("Address of ptr: &(*pptr) = %p\n", &(*pptr));
- printf("\n");
- printf("Address of pptr: &pptr = %p\n", &pptr);
- return 0;
- }
- Outputs:
- Value of var = 3000
- Value available at *ptr = 3000
- Value available at **pptr = 3000
- Address of var: &var = 0x7ffff21a1b64
- Address of var: ptr = 0x7ffff21a1b64
- Address of var: &(*ptr) = 0x7ffff21a1b64
- Address of var: *pptr = 0x7ffff21a1b64
- Address of ptr: &ptr = 0x7ffff21a1b68
- Address of ptr: pptr = 0x7ffff21a1b68
- Address of ptr: &(*pptr) = 0x7ffff21a1b68
- Address of pptr: &pptr = 0x7ffff21a1b70
来源: http://www.bubuko.com/infodetail-3119007.html