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

C语言执行指针算术操作后输出类地址数值的原因是什么?

C语言指针自增后输出异常的原因分析

问题复现代码

#include<stdio.h> 

int main(){
    int i=30;
    int *ptr=&i;
    printf("Value of i is %d\n",*ptr);
    ptr++;
    printf("Value of i is %d\n",*ptr);
    return 0;
}

具体原因说明

  • 初始状态下int*类型的指针ptr指向局部变量i的内存地址,第一次解引用*ptr读取的就是i存储的值30,输出结果正常。
  • C语言的指针算术会按照指针指向的类型长度计算偏移量:int类型在常规64位/32位系统中占4字节,执行ptr++操作后,指针会向后偏移4字节,指向i变量占用内存之后的相邻地址。
  • 这个偏移后的地址不属于程序合法声明的可读写变量空间,也没有被初始化赋值,对其解引用属于未定义行为,读取到的是内存中遗留的随机垃圾值,所以第二次输出的是无实际意义的随机数,也就是你看到的6618648这类异常数值。
  • 这类非法内存访问操作存在很高风险,除了读取到无效值外,严重时会直接触发段错误导致程序崩溃,实际开发中要严格避免。

内容的提问来源于stack exchange,提问作者Nirbhay Thakkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:54:04