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

【C语言】_指针运算

目录

1. 指针+-整数

2. 指针-指针

2.1 指针-指针含义

2.2 指针-指针运算应用:实现my_strlen函数

3. 指针的关系运算(大小比较)


1. 指针+-整数

联系关于指针变量类型关于指针类型和指针+-整数相关知识:

原文链接如下:

【C语言】_指针变量-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/m0_63299495/article/details/144883068对于type* p,p+n表示跳过n×sizeof(type)个字节;

以打印一维数组元素(数组在内存中连续存放)为例:

代码示例1:利用下标打印:

int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < sz; i++) {printf("%d ", arr[i]);}return 0;
}

运行结果为:

代码示例2: 利用指针打印:

int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;int* p = arr;int sz = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < sz; i++) {printf("%d ",*p);p++;}return 0;
}

运行结果如下: 

代码示例3:利用指针打印:

int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = arr;int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < sz; i++) {printf("%d ", *(p + i));}return 0;
}

运行结果如下:

2. 指针-指针

2.1 指针-指针含义

指针-指针的绝对值得到的是指针与指针之间元素的个数:

代码示例:

int main() {int arr[10] = { 0 };printf("%d\n", &arr[9] - &arr[0]);printf("%d\n", &arr[0] - &arr[9]);return 0;
}

运行结果为: 

注:指针-指针运算的前提是两个指针必须指向同一块内存空间:

int main() {int arr[6];char ch[5];printf("%d",&arr[4]-&ch[3]);  //error
}

arr[6]与ch[5]的内存空间未必连续,这样的指针相减运算是没有意义的;

2.2 指针-指针运算应用:实现my_strlen函数

1、strlen函数的功能:计算字符串长度(\0前的字符个数)

int main() {char arr[] = "abcdef";int len = strlen(arr);printf("The length of the array is %d\n" ,len);return 0;
}

运行结果如下: 

 

2、实现my_strlen()函数:

实现方式1:

#include<stdio.h>
int my_strlen(char* str) {  // 关于形参:arr == &arr[0],用字符指针接收int count = 0;while (*str != '\0') {count++;str++;}return count;
}
int main() {char arr[] = "abcdef";// 字符串变量末尾暗含一个\0:[a b c d e f \0]int len = my_strlen(arr);printf("%d\n", len);return 0;
}

运行结果:

实现方式2:

int my_strlen(char* str) {char* start = str;while (*str != '\0') {str++;}return str - start;
}
int main() {char arr[] = "abcdef";// 字符串变量末尾暗含一个\0:[a b c d e f \0]int len = my_strlen(arr);printf("%d\n", len);return 0;
}

运行结果:

3. 指针的关系运算(大小比较)

代码示例:利用指针关系实现数组元素遍历:

int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = arr;int sz = sizeof(arr) / sizeof(arr[0]);while (p < arr + sz) {printf("%d ", *p);p++;}return 0;
}

运行结果: 

http://www.lryc.cn/news/514730.html

相关文章:

  • “AI智慧教学系统:开启个性化教育新时代
  • 商用车自动驾驶,迎来大规模量产「临界点」?
  • CSS 学习之正确看待 CSS 世界里的 margin 合并
  • 杰发科技——使用ATCLinkTool解除读保护
  • uni-app深度解码:跨平台APP开发的核心引擎与创新实践
  • unity团结云下载项目
  • Jmeter进阶篇(31)解决java.net.BindException: Address already in use: connect报错
  • 商米电子秤服务插件
  • 华为ensp-BGP路由过滤
  • Sigrity System SI SerialLink模式进行Pcie3协议仿真分析操作指导-pcie3_client_single_post
  • Python提取目标Json键值:包含子嵌套列表和字典
  • 分享6个对象数组去重的方法
  • Formality:官方Tutorial(一)
  • 力扣28找出字符串中第一个匹配项的下标
  • 【JAVA】java中将一个list进行拆解重新组装
  • 在 Windows 上使用 SSH 密钥访问 Linux 服务器
  • 小白0基础centos8安装docker
  • 机器学习之逻辑回归算法、数据标准化处理及数据预测和数据的分类结果报告
  • openGauss连接是报org.opengauss.util.PSQLException: 尝试连线已失败
  • 详细的一条SQL语句的执行流程
  • 适用于小白的程序报错提问 AI 模板
  • web实操9——session
  • OFDM学习-(二)长短序列和PPDU整体数据处理流程
  • .NET周刊【12月第4期 2024-12-22】
  • Conda 安装 Jupyter Notebook
  • 鸿蒙开发:实现键值数据库存储
  • WebGL 实践(一)开发环境搭建
  • 在线机考|2024华为实习秋招春招编程题(最新)——第3题_PCB印刷电路板布线_300分(八)
  • Spring源码分析之事件机制——观察者模式(三)
  • C#实现画图,及实现图像运动,C#中GDI+图形图像技术(Graphics类、Pen类、Brush类)C#之快速入门GDI+绘图 C#实现快速画图功能