C中的指针算术和数组大小

时间:2014-02-06 09:02:24

标签: c

首先:我没有搜索论坛以回答我的问题 问题如下;因为我的时间不多了。这是我的最后一次 有点怀疑

printf("%d\n", q -p);如何在下面的示例中打印1和printf("%d\n", (int)q -(int)p);打印8:

#include <stdio.h>
int main(void)
{

    double  a[2], *p ,*q;
    p = a;
    q = p + 1; /* isn't q holding value of address next to that of p?*/
    printf("%d\n", q -p); /* 1 is printed */
    printf("%d\n", (int)q -(int)p); /*8 is printed*/

    return 0;
}

感谢您的理解

1 个答案:

答案 0 :(得分:6)

好吧,让我们替换。我们知道:

q = p + 1;

然后我们有:

printf("%d\n", q - p);

必须是:

printf("%d\n", p + 1 - p);

因此:

printf("%d\n", 1);

所以,这正是你得到的。有指针算术发生,但如果没有发生,那会不会更奇怪?

基本上这个:

q = p + 1;

表示“让q指向下一个double,跳过p处的double。由于qp的类型为double *,因此已在char中完成。在您的系统上,这似乎跳过8 {{1}} s。