指针相减

来源:互联网 发布:法国华人 知乎 编辑:程序博客网 时间:2024/05/16 06:36

指针相减问题

 最近学习指针时,有一道练习题如下,可以加深自己对指针的理解和使用。

#include <stdio.h>int main(){    int a[] = {1,2,3,4};    int *p1 = a;    int *p2 = &a[3];    printf("%d\n",p2-p1);    return 0;}

问:p2-p1=?

 这里我们要注意的是:指针相减 =相差的位数 = 字节/步长
 上面的程序中,int为4个字节,步长为4,p2与p1总共相差12个字节
 12 / 4 = 3
 结果应为3
 运行如下:

[Jim@localhost ~]$ gcc pointer.c -o pointer

[Jim@localhost ~]$ ./pointer

3

[Jim@localhost ~]$

 另外一个示例程序:

#include <stdio.h>int main(){    int a[] = {1,2,3,4};    char *p1 = a;    char *p2 = &a[3];    printf("%d\n",p2-p1);    return 0;}

 结果为:12 / 1 = 12