欣欣celin 发表于 2014-5-9 22:46:57

C 49th讲,指针相减,出错了

#include"stdio.h"
void main()
{
    int a={1,2,3,4,5};
    int *p1, *p2, *p;
    *p1=&a;
    *p2=&a;
    *p=p2-p1;
    printf("%d", p);
}

以上程式错了吗?编译没问题,但运行不了,求各位大神指点指点{:7_154:}

大黑鱼 发表于 2014-5-9 22:46:58

本帖最后由 大黑鱼 于 2014-5-9 22:57 编辑

#include<stdio.h>
void main()
{
    int a={1,2,3,4,5};
    int *p1, *p2, p; //p1,p2为指针变量
    p1=&a;
    p2=&a;
    p=*p2-*p1;
    printf("%d", p);
}

欣欣celin 发表于 2014-5-9 23:12:39

大黑鱼 发表于 2014-5-9 22:46 static/image/common/back.gif
#include
void main()
{


谢谢大神,但为什么运行结果是3,也就是P1和P2之间相隔的元素的个数,而不是元素间的地址差呢???

大黑鱼 发表于 2014-5-9 23:58:49

欣欣celin 发表于 2014-5-9 23:12 static/image/common/back.gif
谢谢大神,但为什么运行结果是3,也就是P1和P2之间相隔的元素的个数,而不是元素间的地址差呢???

我没看49th
不过结果是3不是相隔元素的个数
p1 = &a;表示指针变量p1指向a;也就是*p1就等价于 a;
所以他们相减的结果是 a - a => 4 - 1 = 3;

欣欣celin 发表于 2014-5-10 22:04:42

大黑鱼 发表于 2014-5-9 23:58 static/image/common/back.gif
我没看49th
不过结果是3不是相隔元素的个数
p1 = &a;表示指针变量p1指向a;也就是*p1就等价于 a ...

原来如此,懂了,感谢
页: [1]
查看完整版本: C 49th讲,指针相减,出错了