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

C 语言 第五章 指针(4)

目录

指针的常用运算

同类指针相减运算

 格式:

实例

举例:

指针间的比较运算

举例:

实例

  


指针的常用运算


同类指针相减运算

 格式:

           指针 - 指针
注:

  • 相同类型的指针允许进行减法运算,返回它们之间的距离,即相隔多少个数据单位(注意:非字节数)。
  • 高位地址减去低位地址,返回的是正值;低位地址减去高位地址,返回的是负值。

实例

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int* p1 = &arr[0];
    int* p2 = &arr[3];
    printf("p2-p1=%d\n", p2 - p1); //3 等同于(地址p1 - 地址p2)/4 ==> 3
    return 0;
}


 
 
体会:

两个指针相减,通常两个指针都是指向同一数组中的元素才有意义。结果是两个地址之差除以数组元素的长度。不相干的两个变量的地址,通常没有做减法的必要。


举例:

#include "stdio.h"
int main() {
    //同类指针相减运算  同类型  连续
    int arr[5] = {[0]: 1, [1]: 2, [2]: 3, [3]: 4, [4]: 5};
    int* p1= &arr[0];
    int* p2= &arr[3];
    printf("%d\n",p2-p1);
    printf("%d\n",p1-p2);
    return 0;
}
#include <stdio.h>
int main(){
    //为什么用指针加减操作
    //指针加减运算,非常适合连续的数据操作
    int arr[5]={11,22,33,44,55};
    int* p =&arr[1];
    printf("p==%d\n",*p);//28-2
    printf("p==%d\n",*(p+1));//33
    printf("p==%d\n",*(p-1));//11
}

指针间的比较运算
 

指针之间可进行==、!=、<、<=、>、>=比较,比较内存地址大小,返回1(真)或0(假)。
 

举例:

int main(){
int arr[5] = {1, 2, 3, 4, 5};  
int* p1 = &arr[0];  
int* p2 = &arr[3];  

printf("%d\n",p1 > p2); //0  
printf("%d\n",p1 < p2); //1  
printf("%d\n",p1 == p2); //0  
printf("%d\n",p1 != p2); //1  
return 0;
}

实例

int main() {  
    int arr[] = {10, 20, 30};  
    int *ptr;  
    ptr = arr; //ptr指向arr首地址(第一个元素)  
    if (ptr == arr[0]) { //错误,类型不一样  
        printf("ok1\n");  
    }  
    if (ptr == &arr[0]) { // 可以  
        printf("ok2\n"); //输出  
    }  
    if (ptr == arr) { //可以  
        printf("ok3\n"); //输出  
    }  
    if (ptr >= &arr[1]) { //可以比较,但返回false  
        printf("ok4\n");//不会输出  
    }  
    if (ptr < &arr[1]) { //可以比较,返回true  
        printf("ok5\n");//输出  
    }  
    return 0;  
}


  
 

相关文章:

  • Polymer入门指南:从零开始构建、组织、管理Web Component
  • 【机器学习-分类算法】
  • 老知识:OpenGL 的 glu这个库已被弃用,改用glm了
  • 【Azure 架构师学习笔记】- Azure Networking(1) -- Service Endpoint 和 Private Endpoint
  • 操作系统的概念、功能和目标
  • 耘想Docker版Linux NAS的安装说明
  • 存算一体与存算分离:架构设计的深度解析与实现方案
  • Linux文件操作笔记
  • 手撕算法之`vector` 扩容、`string` 分割、链表翻转
  • 头歌实训--Pandas合并数据集--第1关:Concat与Append操作
  • vue使用element-ui自定义样式思路分享【实操】
  • freeswitch(在呼叫失败的情况下如何播放语⾳提⽰)
  • 【音视频开发】第三章 FFmpeg 命令实战
  • Java遍历魔法
  • 嵌入式笔记 | 正点原子STM32F103ZET6 3 | 时钟系统
  • 【MySQL】基本查询(第一弹)
  • P10045 [CCPC 2023 北京市赛] 线段树
  • docker部署dify
  • VNA操作使用学习-14 再测晶振特性
  • 发布第四代液晶电视,TCL引领全新美学境界
  • 上海市重大工程一季度开局良好,崇明线等按既定计划加快建设
  • 内塔尼亚胡:以军将在未来几天“全力进入”加沙
  • 成都警方通报:8岁男孩落水父母下水施救,父亲遇难
  • 上海浦东机场1号、2号航站楼均推出国内出发安检24小时服务
  • 全球医药股普跌,A股创新药板块下挫
  • 媒体谈法院就“行人相撞案”道歉:执法公正,普法莫拉开“距离”