当前位置: 首页 > article >正文

C 指针和整数的加减法运算

1-1 指针和整数的加减法运算


//获取: <stat>[,[<tac>],[<ci>],[<AcT>]] +CGREG: 2,5,"27CA","74FD",0
pos[0] = strstr(single_cmd.tx_buf, ",");    //第1个,后面为stat
pos[1] = strstr(pos[0] + 1, ",\"");         // “,/”后面为[<tac>]
pos[2] = strstr(pos[1] + 4, ",\"");         // “,/”后面为[<ci>]
pos[3] = strstr(pos[2] + 4, ",");           //第4个,后面为[<act>]

需求主要是源于这部分的代码:


起初对于该段代码的疑点主要是在这个位置:strstr(pos[0] + 1, ",\""); 这里的pos[0] + 1 在数组中的含义是当前数组下标对应的值+1,但是当前的代码工程中这是一个char * 类型的指针,指针对应的含义是pos[0] 是一个指针数组,每个元素都是一个 char* 类型的指针,它们用来存储通过 strstr 函数找到的子串位置。


1-1-1 实际的案例演示


虽然指针之间的加法是非法的,但指针与整数的加法或减法是合法的,且有明确的语义。


指针与整数的加法:

  • 如果 ptr 是一个指针,n 是一个整数,那么 ptr + n 的结果是一个新的指针,指向 ptr 所指向的数组中第 n 个元素之后的位置。

  • 如果 ptr 指向数组的第 i 个元素,那么 ptr + n 指向第 i + n 个元素。

int arr[] = {10, 20, 30, 40, 50};
int* ptr = &arr[0];  // 指向第1个元素

int* new_ptr = ptr + 2;  // 指向第3个元素(值为30)

指针与整数的减法:

  • 如果 ptr 是一个指针,n 是一个整数,那么 ptr - n 的结果是一个新的指针,指向 ptr 所指向的数组中第 n 个元素之前的位置。

  • 如果 ptr 指向数组的第 i 个元素,那么 ptr - n 指向第 i - n 个元素。

int* new_ptr = ptr + 2;  // 指向第3个元素
int* prev_ptr = new_ptr - 1;  // 指向第2个元素(值为20)

总结:


  1. 指针的减法:合法且有意义,用于计算两个指针之间的元素个数。

  2. 指针的加法:非法且未定义行为,不被C语言标准支持。

  3. 指针与整数的加法/减法:合法且常用,用于指针的移动操作。


......


http://www.kler.cn/a/550769.html

相关文章:

  • mysql 学习15 SQL优化,插入数据优化,主键优化,order by优化,group by 优化,limit 优化,count 优化,update 优化
  • 开源工具推荐--思维导图、流程图等绘制
  • 深度学习05 ResNet残差网络
  • sql not in 优化
  • QT笔记——QPlainTextEdit
  • 使用docker部署NextChat,使用阿里云、硅机流动、deepseek的apikey
  • 深度学习算法​:ocr营业执照识别可提取字段、接口识别
  • 《Nuxt.js 实战:从放弃到入门》二、Element Plus 集成
  • Oracle 12c中在同一组列上创建多个索引
  • 利用亚马逊AI代码助手生成、构建和编译一个游戏应用(下)
  • 基于springboot社会志愿者服务管理平台(源码+lw+部署文档+讲解),源码可白嫖!
  • 抖去推与超级编导矩阵系统技术深度对比,矩阵系统支持OEM
  • Ubuntu20.04安装IsaacSim4.5与IsaacLab2.0
  • 机器学习-02-机器学习算法思想以及在各行各业的应用
  • 成熟开发者需具备的能力
  • 【react8】如何在网页中直接引入react进行demo开发
  • OS-Genesis:基于逆向任务合成的 GUI 代理轨迹自动化生成
  • 若依Flowable工作流版本监听器使用方法
  • JSX和JS有什么区别
  • 从入门到精通:Postman 实用指南