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

C语言指针算术运算符++工作原理及运算符重载相关疑问

C语言指针算术运算符++的工作原理解析

指针++的核心运作逻辑

C语言里,指针的++运算符不是简单把内存地址加1字节,而是根据指针指向的数据类型的大小,自动偏移对应的字节数,直接跳到同类型下一个元素的内存地址。比如指向int的指针,++后地址会增加sizeof(int)(通常是4字节);指向double的指针,++后地址增加sizeof(double)(通常是8字节)。

另外要区分前置和后置:++pi是前置自增,先偏移指针地址,再返回偏移后的指针;pi++是后置自增,先返回当前指针,再执行地址偏移。

和C++运算符重载的区别

完全不是一回事。C语言没有运算符重载的特性,指针的++是C语言针对指针类型原生内置的算术规则,是语言本身就规定好的固定行为,并非像C++那样由用户自定义运算符的重载逻辑。

结合示例代码的具体说明

示例代码:

#include <stdio.h>

int main(){
  int i[5] = {1, 2, 3, 4, 5};
  int    *pi = i;
  double f[5] = {1.0, 2.0, 3.0, 4.0, 5.0};
  double *pf = f;

  printf("sizeof int:%lu bytes\tsizeof double:%lu bytes\t\n",
          sizeof (int), sizeof (double));
  printf("i[0]: %d \tMemAddress:%p\t\n", *pi, pi);
  printf("i[1]: %d \tMemAddress:%p\t\n", *++pi, pi);
  printf("f[0]: %f \tMemAddress:%p\t\n", *pf, pf);
  printf("f[1]: %f \tMemAddress:%p\t\n", *++pf, pf);
}

运行结果截图:
运行结果截图

从结果能直观看到:

  • int类型占4字节,double类型占8字节
  • 初始pi指向数组i的第一个元素地址,执行*++pi时,pi先偏移4字节到i[1]的地址,再取值输出2,此时打印的地址比初始地址大4
  • 初始pf指向数组f的第一个元素地址,执行*++pf时,pf偏移8字节到f[1]的地址,取值输出2.0,地址比初始地址大8

这完全符合指针++根据类型大小偏移的规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:01:08