首先:我没有搜索论坛以回答我的问题 问题如下;因为我的时间不多了。这是我的最后一次 有点怀疑
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;
}
感谢您的理解
答案 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
。由于q
和p
的类型为double *
,因此已在char
中完成。在您的系统上,这似乎跳过8 {{1}} s。