0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

指针的加法操作

学益得智能硬件 来源:学益得智能硬件 2023-03-29 10:12 次阅读

指针的加法操作我们见过很多,但是减法操作遇到的好像很少。

有这么一个笔试题:

inta[]={1,2, 3};
int *p1 = &a[0];
int *p2 = &a[2];


printf("%ld
", p2 - p1);
一个数组,两个指针,指针p1指向数组第一个元素,指针p2指向数组第三个元素,问p2-p1的结果是多少?

我觉得答案应该分两种,8或者2。

结果8是因为一个整数占了4个字节,两个整数当然是8个字节。

结果2是因为他们相差了两个元素。


下面还是敲代码试一下,直接用printf输出结果,选择%ld作为输出格式。
root@Turbo:test# ./test 
2
root@Turbo:test#
结果是2。

所以相同类型指针做减法操作的时候,结果还是元素的个数。

就好像p1+2加的是8个字节而不是2个字节一样。


最后,给大家留个问题,如果希望printf输出的结果是8,那代码应该怎么修改?

答案:

对指针进行强制类型转换,可以转换成整型或者字符型指针。
printf("%lu
", (int)p2 - (int)p1);
printf("%lu
", (char *)p2 - (char *)p1);

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 字符
    +关注

    关注

    0

    文章

    232

    浏览量

    25170
  • 指针
    +关注

    关注

    1

    文章

    479

    浏览量

    70506
  • 代码
    +关注

    关注

    30

    文章

    4741

    浏览量

    68325
  • 数组
    +关注

    关注

    1

    文章

    414

    浏览量

    25905

原文标题:指针减法

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    函数指针的使用简述

    函数指针在Linux内核和C语言开发中用的非常多,而且在设计操作系统的时候也会用到,因此这里将详细讲解函数指针。既然函数指针也是指针,那函数
    的头像 发表于 09-09 08:56 1953次阅读
    函数<b class='flag-5'>指针</b>的使用简述

    指针变量的基本操作

    指针变量也是一个变量,对应一块内存空间,对应一个内存地址,指针名就是己址。这空内存空间多大?一个机器字长(machine word),32位的CPU和操作系统就是32个位,4个字节,其值域为
    发表于 10-26 09:56 408次阅读

    C语言:指针运算

    元素的位置,以此类推。把一个指针减去3使它向左移动3个元素的位置。要注意的是,如果进行完加法或者减法运算后,指针指向的位置不在数组的范围内,则发生了数组越界。对这个指针执行间接访问,即
    发表于 01-11 15:11

    【原创】聊一聊内存指针操作

    中,各种处理器都有对内存的不同的寻址方式读写内存。在高级语言中,C语言是唯一可以进行内存操作的语言,C语言对内存的操作主要需要通过指针来完成。1、使用指针
    发表于 07-28 09:10

    C语言入门教程-指向指针指针

    指向指针指针 创建一个指针,使它指向另一个指针,这是可能的,而且常常也是必要的。这一技术有时被称为句柄。在某些情况下,操作系统需要有自主
    发表于 07-29 12:10 1086次阅读

    加法器,加法器是什么意思

    加法器,加法器是什么意思 加法器 :  加法器是为了实现加法的。  即是产生数的和的装置。加数和被加数为输入,和数与
    发表于 03-08 16:48 5504次阅读

    补码加法,补码加法计算原理

    补码加法,补码加法计算原理    负数用补码表示后,可以和正数一样来处理。这样,运算器里只需要一个加法器就可以了,不必为了负数的加法运算,再配一个减
    发表于 04-13 11:41 1.8w次阅读

    为什么使用指针?C++中的“指针

    为什么使用指针?因为在操作大型数据和类时,指针可以通过内存地址直接访问数据,可避免在程序中复制大量的代码,因此指针的效率最高。一般来说,指针
    的头像 发表于 10-04 10:33 5103次阅读

    加法器原理

    加法器是产生数的和的装置。加数和被加数为输入,和数与进位为输出的装置为半加器。若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。常用作计算机算术逻辑部件,执行逻辑操作、移位与指令调用
    的头像 发表于 06-19 14:20 2.6w次阅读
    <b class='flag-5'>加法</b>器原理

    理解函数指针、函数指针数组、函数指针数组的指针

    理解函数指针、函数指针数组、函数指针数组的指针
    的头像 发表于 06-29 15:38 1.5w次阅读
    理解函数<b class='flag-5'>指针</b>、函数<b class='flag-5'>指针</b>数组、函数<b class='flag-5'>指针</b>数组的<b class='flag-5'>指针</b>

    加法器工作原理_加法器逻辑电路图

    加法器是产生数的和的装置。加数和被加数为输入,和数与进位为输出的装置为半加器。若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。常用作计算机算术逻辑部件,执行逻辑操作、移位与指令调用
    发表于 02-18 14:40 3.3w次阅读
    <b class='flag-5'>加法</b>器工作原理_<b class='flag-5'>加法</b>器逻辑电路图

    STM32位带引申的指针变量问题

    位带操作牵涉到的一个重要知识点就是指针变量。这种位带映射操作,就是操作映射过后的地址,其实就是操作指针
    发表于 02-08 15:57 3次下载
    STM32位带引申的<b class='flag-5'>指针</b>变量问题

    加法器的原理及采用加法器的原因

    有关加法器的知识,加法器是用来做什么的,故名思义,加法器是为了实现加法的,它是一种产生数的和的装置,那么加法器的工作原理是什么,为什么要采用
    的头像 发表于 06-09 18:04 5055次阅读

    串行加法器和并行加法器的区别?

    串行加法器和并行加法器是两种基本的数字电路设计,用于执行二进制数的加法运算。它们在设计哲学、性能特点以及应用场景上有着明显的区别。
    的头像 发表于 05-23 15:06 2151次阅读

    C语言指针运算符详解

    在C语言中,当你有一个指向数组中某个元素的指针时,你可以对该指针执行某些算术运算,例如加法或减法。这些运算可以用来遍历数组中的元素,如ptr[i]等价于*(ptr + i)。然而,如果你的操作
    的头像 发表于 10-30 11:16 153次阅读