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

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. 指针与整数的加法/减法:合法且常用,用于指针的移动操作。


......

相关文章:

  • 六、soul源码学习-SpringCloud项目本地运行
  • 【核心算法篇十七】《深度解析DeepSeek概率图模型:贝叶斯网络推理引擎的技术内核》
  • 【如何基于Debian构建Kali Linux】
  • Linux-进程概念
  • 配置haproxy实现MySQL服务器负载均衡
  • 【技术前沿】中安购物小票识别系统:1秒内精准识别,助力商场智能化升级!
  • 撕碎QT面具(7):container控件被spacer挤扁,无法进行控件添加的处理方案。
  • YOLOv12从入门到入土(含结构图)
  • Mysql测试连接失败
  • 【机器学习】K折交叉验证(K-Fold Cross-Validation)
  • Jenkins插件管理切换国内源地址
  • 基于STM32+ESP8266+手机 APP+阿里云的智能小车设计与实现(系统资料)
  • B树和B+树
  • 2013年下半年试题一:论软件架构建模技术与应用
  • 堆和栈的区别
  • 自制操作系统分享第四天
  • 数据库服务器是指什么?
  • 每日一题——编辑距离
  • DeepSeek 助力 Vue 开发:打造丝滑的瀑布流布局(Masonry Layout)
  • 【读取filePath这个文件中的内容,并打印出来】+【if else 的优化】
  • 总奖金池百万!澎湃与七猫非虚构写作与现实题材征文大赛征稿启动
  • 人形机器人灵犀X2掌握新技能:有了“内心戏”,还会拳脚功夫
  • 九江宜春领导干部任前公示,3人拟提名为县(市、区)长候选人
  • 俄外交部:俄乌伊斯坦布尔谈判改在当地时间15日下午举行
  • 曾犯强奸罪教师出狱后办教培机构?柳州鱼峰区教育局回应
  • 市场监管总局召开平台企业支持个体工商户发展座谈会