You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中用单个*解引用二级指针时*pp的实际含义是什么?

#include <stdio.h>
int main(){
    int integer = 300;
    int* p = &integer;
    int** pp = &p;
    printf("*pp = %i", *pp);
}

问题1:*pp实际代表什么

我们先理清几个变量的存储关系:

  • int integer = 300:定义了普通int类型变量,存储值为300,它在内存中拥有专属的内存地址
  • int* p = &integer:定义了一级指针p,它存储的内容是integer的内存地址;同时p本身作为变量,也有自己独立的内存地址
  • int** pp = &p:定义了二级指针pp,它存储的内容是指针p自己的内存地址

C语言中*是解引用操作符,作用是取出指针指向的内存空间内存储的值。pp存储的是p的地址,也就是说pp指向p的内存空间,因此*pp就是取出p对应内存空间里存储的内容,它的类型是int*,值为integer的内存地址,等价于直接使用变量p。

问题2:打印*pp得到的输出值,是否就是指针p的地址中存储的对应数值

是的,这个结论完全成立。p的地址对应的存储区域里存的就是integer的地址,刚好就是*pp的取值。

需要额外注意这段代码的写法瑕疵:用%i格式化输出指针类型属于未定义行为,%i是用来输出有符号整数的,不同平台下指针长度和int长度可能不一致,会导致输出结果异常。如果要正确打印指针地址,应该用%p占位符,并且把参数强转为void*,正确写法为printf("*pp = %p", (void*)*pp);。

内容的提问来源于stack exchange,提问作者Sayem Rahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:15:00