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

C语言 指针的运算

目录

一、介绍

二、指针  +   整数  、指针  -  整数

二、指针  -  指针

四、指针的关系运算


一、介绍

在C语言中,指针的运算分为三类

  • 1、指针  +   整数  、指针  -  整数
  • 2、指针  -   指针
  • 3、指针的关系运算

二、指针  +   整数  、指针  -  整数

因为数组在内存中是连续存放的,只要知道第一个元素的地址,顺藤摸瓜就能找到后面的所有元素。

// 利用指针的整数运算,打印数组的每一个元素int main()
{int arr[]={1,2,3,4,5,6,7,8,9,10};int * p =&arr[0];//将首地址交予了指针变量pint i =0;int sz = sizeof(arr)/sizeof(arr[0]);for(i = 0; i < sz; i++){printf("%d",*(p+i));//*(p+i)相当于首地址跳过了i*4 个字节,并指向了p+i 地址的内容}return 0;
}// 在数组中的首地址就是arr[0]的地址// 当p存储的是首地址时// *(p+i) 相当于 arr[0+i] 它们是表示内容// 而 p+i  则相当于 &arr[0+i]  它们是表示地址 甚至可以写成 &arr[0]+i ---> &arr[i]// 利用指针的整数运算,打印出字符串int main()
{int arr = "abcdef";char * p = &arr[0];while(*p != '\0')//  abcdef 在数组中是 ['a','b','c','d','e','f','\0'] 二打印字符串并不需要\0{printf("%c",*p);p = p+1;//进行地址的修改 使得*p所指向的内容转移到下一个地址中的内容}return 0;
}

二、指针  -  指针

指针-指针本质是地址减去地址。

而指针-指针的前提是:指针-指针(地址-地址]的前提是两个指针指向同一块空间的。

且指针-指针(地址-地址)得到的值的绝对值是指针和指针之间元素的个数。

int main()
{int arr [10] = {0};int ret = &arr[9] - &arr[0];int ret1 = &arr[0] - &arr[9];printf("%d\n",ret);return 0;}// 得出的答案是 ret = 9  ret1 = -9

// 应用
// 利用指针 - 指针 求字符串的长度int my_strlen(char* str)//传数组名,数组名也就是首元素地址
{char* start = str;//将数组首地址交予一个新的指针变量while (*str != '\0')//打印字符串不打印\0{str++;//指针内存储的地址不断地往下移动}return str - start;//使用最后\0前的指针变量减去首元素的指针变量
}int mian()
{char arr[] = "abcdef";int len = my_strlen(arr);printf("%d",len);return 0;
}

四、指针的关系运算

指针的关系与运算,实质上就是指针比较大小,本质上是地址比较大小

// 应用
// 利用指针的大小关系,打印出数组中的所有元素int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int* p = arr;//arr表示的是首元素地址int sz = sizeof(arr) / sizeof(arr[0]);while (p < arr + sz)//指针的关系运用{printf("%d ",*p);p++;}return 0;
}// p<arr+sz表示的是 p所存储的地址要小于 数组的边界范围的地址 
// 例如题中arr[10]是不存在的,而arr+sz相当于&arr[0] + 10 = &arr[10] 

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

相关文章:

  • 【JAVA基础】- 同步非阻塞模式NIO详解
  • dingding机器人
  • 6.6 实现卷积神经网络LeNet训练并预测手写体数字
  • Django路由Router
  • 蜜蜂路线 P2437
  • 无脑——010 复现yolov8 使用yolov8和rt detr 对比,并训练自己的数据集
  • 如何给Google Chrome增加proxy
  • 设计模式——原型模式
  • Spring框架中的Bean生命周期
  • async和await修饰符
  • vivado tcl创建工程和Git管理
  • 田间农业数字管理系统-高标准农田建设
  • 【网络安全】等保测评系列预热
  • 解决: git拉取报错 git 未能顺利结束 (退出码 1)
  • 【深度学习中的批量归一化BN和层归一化LN】BN层(Batch Normalization)和LN层(Layer Normalization)的区别
  • 开发一个RISC-V上的操作系统(六)—— 中断(interrupt)和异常(exception)
  • 心跳跟随的心形灯(STM32(HAL)+WS2812+MAX30102)
  • 5. 服务发现
  • 算法备案背后的原因:确保技术透明度与公正
  • Linux centos 常用命令 【持续更新】
  • 《使用 VMware 在 Windows 上搭建 Linux 系统的完整指南》
  • 大数据Flink(六十):Flink 数据流和分层 API介绍
  • 软件测试面试题——如何测试App性能?
  • 玩转C链表
  • MySQL表的基础的增删改查
  • 数字化车间
  • 基础堆排序
  • ISC 2023 | 赛宁网安验证评估 重磅发布
  • 浅谈AI浪潮下的视频大数据发展趋势与应用
  • github 无语的问题,Host does not existfatal: Could not read from remote repository.