alex_bn_lee

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

【424】C语言二级指针

参考:C 指向指针的指针

指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。

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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

 

 

posted on   McDelfino  阅读(326)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示