指针的加法操作我们见过很多,但是减法操作遇到的好像很少。
有这么一个笔试题:
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
原文标题:指针减法
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
指针变量的基本操作
指针变量也是一个变量,对应一块内存空间,对应一个内存地址,指针名就是己址。这空内存空间多大?一个机器字长(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次阅读
补码加法,补码加法计算原理
补码加法,补码加法计算原理 负数用补码表示后,可以和正数一样来处理。这样,运算器里只需要一个加法器就可以了,不必为了负数的加法运算,再配一个减
发表于 04-13 11:41
•1.8w次阅读
为什么使用指针?C++中的“指针”
为什么使用指针?因为在操作大型数据和类时,指针可以通过内存地址直接访问数据,可避免在程序中复制大量的代码,因此指针的效率最高。一般来说,指针
加法器原理
加法器是产生数的和的装置。加数和被加数为输入,和数与进位为输出的装置为半加器。若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。常用作计算机算术逻辑部件,执行逻辑操作、移位与指令调用
加法器工作原理_加法器逻辑电路图
加法器是产生数的和的装置。加数和被加数为输入,和数与进位为输出的装置为半加器。若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。常用作计算机算术逻辑部件,执行逻辑操作、移位与指令调用
发表于 02-18 14:40
•3.3w次阅读
加法器的原理及采用加法器的原因
有关加法器的知识,加法器是用来做什么的,故名思义,加法器是为了实现加法的,它是一种产生数的和的装置,那么加法器的工作原理是什么,为什么要采用
串行加法器和并行加法器的区别?
串行加法器和并行加法器是两种基本的数字电路设计,用于执行二进制数的加法运算。它们在设计哲学、性能特点以及应用场景上有着明显的区别。
C语言指针运算符详解
在C语言中,当你有一个指向数组中某个元素的指针时,你可以对该指针执行某些算术运算,例如加法或减法。这些运算可以用来遍历数组中的元素,如ptr[i]等价于*(ptr + i)。然而,如果你的操作
评论