指针可以进行加减运算吗(函数指针是否可以加加)

2023-10-29 06:20:02 :61

指针可以进行加减运算吗(函数指针是否可以加加)

“指针可以进行加减运算吗”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看指针可以进行加减运算吗(函数指针是否可以加加)!

本文目录

函数指针是否可以加加

先说结论,函数指针不能加减假设我定义了两个函数int func1(int i,int j){return i+j;}int func2(int i,int j){int a=1;return i+j;}int main(){ int(*func_def1)(int,int)=func1; int(*func_def2)(int,int)=func2; int val=func_def2-func_def1;}首先,如果我们定义了两个char*类型的指针,那么两个相减除以char的宽度1就是这两个指针的差倘若是两个char**类型的相减,那就是两个指针相减除char*的宽度4就是这两个指针的差,所以两个指针相减就是把两个指针的差除以两个指针抹去一颗星之后的类型的宽度就是它的最终结果。那func_def2-func_def1是什么结果呢?func_def2是int(*)(int,int)类型的,去掉一颗星是int (int,int)类型的函数,巧了,func1和func2都是int (int,int)类型的,类型是相等的那么最终结果就是func_def2的地址减去func_def1的结果除以func_def2长度或者func_def1的长度这种结果显然不合理,结果不是唯一的因为func_def2生成的机器码程序长度显然和func_def1的长度是不同的,自然不可以对函数指针进行加减运算,所以对函数指针加减一个常数也是不行的但是函数指针可以比较大小,因为比较大小的操作仅仅是对地址进行比较,并不涉及指针的加减运算

指针是整数吗,若不是整数,指针为什么可以进行加减运算

指针是16进制的地址,可以进行减法。p2指向的是buf[3]的地址;p1指向的是buf[1]的地址;因为是整型数据,所以一个整型是4个字节,p2-p1=(p2指向的地址-p1指向的地址)/sizeof(int)p1与p2地址之间差2个整型即 8个字节大小;第二个等于是将地址转化为10进制然后在相减,故得数为8;int a; int *p1=&a; int *p2=&a; printf("%ld\n",p2-p1); printf("%d\n",(int)p2); printf("%d\n",(int)p1);打印出转成in t型的地址,(不转int,直接打印地址也可以看出来相差8个字节)

在对指针进行加、减算术运算时

不准确。指针加减运算移动的是对应于数据类型的一个内存区域。具体长度与数据类型有关,有时还会考虑内存对齐问题。可以这么理解,指针加1,移到下一个数据存储地址;指针减一,移到上一个数据地址。

如果你还想了解更多这方面的信息,记得收藏关注本站。

指针可以进行加减运算吗(函数指针是否可以加加)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.