C语言 指针运算

指针运算主要包含你提到的这几种,它们都有特定的规则和用途,尤其是在处理数组时非常强大。

指针与整数运算

这种运算用于让指针在内存中移动。

  • 规则 :当指针 p 加上或减去一个整数 n 时,指针实际移动的字节数是 n * sizeof(指针指向的数据类型)。这确保了指针总是按"数据单元"为单位进行移动,而不是简单的字节地址加减。
  • 示例 :
    • 对于一个 int* 类型的指针 p(在 int 占4字节的系统上),p + 1 会使地址值增加 4 个字节,指向下一个 int 元素。
    • 对于一个 char* 类型的指针 q,q + 1 会使地址值增加 1 个字节。
  • 核心用途:遍历数组。这是指针最经典的应用场景之一。

指针与指针相减

这种运算用于计算两个指针之间的距离。

  • 规则 :只有当两个指针指向同一个数组中的元素时,它们相减才有意义。
  • 结果 :结果是一个整数,表示两个指针之间相隔的元素个数,而不是字节数。
  • 示例 :如果指针 p1 指向数组的第1个元素,p2 指向第5个元素,那么 p2 - p1 的结果是 4。
  • 注意 :两个指针相加(p1 + p2)是非法的,没有实际意义。

指针的关系运算

这种运算用于比较两个指针在内存中的相对位置。

  • 规则 :同样,只有指向同一个数组(或同一块连续内存区域)的指针进行比较才有实际意义。
  • 运算符 :支持 >, <, >=, <=, ==, != 六种关系运算符。
  • 含义 :比较的是两个指针所指向的内存地址的高低。例如,如果指针 p1 指向的元素在数组中位于 p2 指向的元素之前,那么 p1 < p2 为真。
  • 核心用途 :在遍历数组时作为循环的终止条件,例如 for (; p < &arr[n]; p++)。
相关推荐
w_zero_one2 小时前
算法--模拟
java·数据结构·算法
秋天的怀念_David2 小时前
算法一千零一夜 · 第十三夜 幻方,武侠世界里的数学迷宫
java·程序人生·算法
·present·2 小时前
CSAPP(lecture 4_01)
c语言·c++
秋天的怀念_David3 小时前
算法一千零一夜 · 第十四夜 幻方与奇妙的二进制
java·程序人生·算法
薛定e的猫咪3 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
薛定e的猫咪3 小时前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
小羊没烦恼!5 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
wanderist.5 小时前
202609CSP认证P3
算法
云淡风轻~窗明几净5 小时前
角谷猜想最接近严格证明的测试 Version1.1.1
人工智能·算法·机器学习·图论
机器学习之心6 小时前
PINN × SVM × NSGA-II × 熵权TOPSIS:一套跑通「建模—优化—决策」的多目标优化框架
算法·机器学习·支持向量机