在整数数组的情况下,指针减法究竟是如何工作的?

在整数数组的情况下,指针减法究竟是如何工作的?,第1张

概述#include<stdio.h>int main(){ int arr[] = {10, 20, 30, 40, 50, 60}; int *ptr1 = arr; int *ptr2 = arr + 5; printf("Number of elements between two pointer are: %d.",
#include<stdio.h>int main(){    int arr[] = {10,20,30,40,50,60};    int *ptr1 = arr;    int *ptr2 = arr + 5;    printf("Number of elements between two pointer are: %d.",(ptr2 - ptr1));    printf("Number of bytes between two pointers are: %d",(char*)ptr2 - (char*) ptr1);    return 0;}

对于第一个printf()语句,根据Pointer subtraction confusion,输出将为5

第二个printf()语句怎么样,输出是什么?

解决方法 引用C11,章节§6.5.6,附加运算符

When two pointers are subtracted,both shall point to elements of the same array object,or one past the last element of the array object; the result is the difference of the subscripts of the two array elements.

所以,当你在做的时候

printf("Number of elements between two pointer are: %d.",(ptr2 - ptr1));

ptr1和ptr2都是指向int的指针,因此它们给出了下标5中的差异.换句话说,地址的差异是参考sizeof(< type>)来计算的.

OTOH,

printf("Number of bytes between two pointers are: %d",(char*)ptr2 - (char*) ptr1);

ptr1和ptr2都被转换为指向char的指针,char的大小为1个字节.计算相应地进行.结果:20.

FWIW,请注意,减去两个指针会产生结果作为ptrdiff_t的类型,您应该使用%td格式说明符来打印结果.

总结

以上是内存溢出为你收集整理的在整数数组的情况下,指针减法究竟是如何工作的?全部内容,希望文章能够帮你解决在整数数组的情况下,指针减法究竟是如何工作的?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1223627.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存