【发布时间】:2016-01-22 20:42:00
【问题描述】:
为什么如果我从一个指针中减去另一个指针(整数指针)而不进行类型转换,结果将是 1 而不是 4 个字节(就像我将两个指针都类型转换为 int 时一样)。示例:
int a , b , *p , *q;
p = &b;
q = p + 1; // q = &a;
printf("%d",q - p); // The result will be one .
printf("%d",(int)q - (int)p); // The result will be 4(bytes). The memory address of b minus The memory address of a.
【问题讨论】:
-
您的代码调用了未定义的行为。对于指针差异,请使用
ptrdiff_t和适当的说明符到printf。 -
正常的,当你做pointer = pointer + 1时,它增加了1 * sizeof(int *);
-
@PierreEmmanuelLallemant:我相信你的意思是
1 * sizeof(int),而不是int*。 -
因为指针算法旨在匹配数组索引。换句话说,
array[i]等价于*(array + i)。 -
这是一个很好的解释。 @user3386109