指针减法混淆

时间:2015-03-05 11:24:27

标签: c pointers

当从彼此中减去两个指针时,差异表示它们之间的元素数量(指向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;
}    

2 个答案:

答案 0 :(得分:3)

您正在使用double打印%d值,该值需要一个整数。将val的类型更改为int,一切都将按预期工作。

请注意,正如下面的注释中所建议的,C定义了指针差异的类型ptrdiff_t。这保证总是保持指针差异产生的值,无论实际指针有多远。虽然,如果您完全确定差异适合int,如您的问题,那么该类型也应该没问题。但是double完全没有意义,指针差异不能是小数值。

答案 1 :(得分:1)

Double不是指针差异的正确类型。请改用ptrdiff_t中定义的stddef.hSee 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);