当从彼此中减去两个指针时,差异表示它们之间的元素数量(指向int时)。
为什么指向double类型时差异为零?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
double data[10] = {1,2,3,4,5,6,7,8,9};
double *iptr1;
double *iptr2;
double val;
iptr1 = &data[0];
iptr2 = &data[9];
val = iptr2 - iptr1;
printf("Distance between the two addresses = %d\n", val);
return 0;
}
答案 0 :(得分:3)
您正在使用double
打印%d
值,该值需要一个整数。将val
的类型更改为int
,一切都将按预期工作。
请注意,正如下面的注释中所建议的,C定义了指针差异的类型ptrdiff_t
。这保证总是保持指针差异产生的值,无论实际指针有多远。虽然,如果您完全确定差异适合int
,如您的问题,那么该类型也应该没问题。但是double
完全没有意义,指针差异不能是小数值。
答案 1 :(得分:1)
Double
不是指针差异的正确类型。请改用ptrdiff_t
中定义的stddef.h
。
See here for the Data Types
而不是
printf("Distance between the two addresses = %d\n", val);
然后使用
ptrdiff_t val = iptr2 - iptr1;
printf("Distance between the two addresses = %td\n", val);