【发布时间】:2017-06-12 11:33:24
【问题描述】:
int main()
{
int x = 4;
int *p = &x;
int *k = p++;
int r = p - k;
printf("%d %d %d", p,k,p-k);
getch();
}
输出:
2752116 2752112 1
为什么不4?
而且我不能使用p+k 或除- 之外的任何其他运算符(减法)。
【问题讨论】:
-
先试试这个:
int r = (int)((char *)p - (char *)k)。让我们知道结果。稍后我们将讨论结果。 -
您的代码调用了未定义的行为。
%d需要int参数,您传递指针和ptrdiff_t。并且指向不同不同数组的指针(单个对象被视为 1 元素数组)可能不会被减去(分别是没有意义的差异)。您应该阅读一本好的 C 书籍中的回合指针。你认为两个指针的总和应该产生什么?
标签: c pointers pointer-arithmetic