【发布时间】:2014-09-15 10:28:27
【问题描述】:
我在学习pointer arithmetic时发现了如下代码:
#include <stdio.h>
int main()
{
int *p, *q, *r, a, b;
p = &a;
q = &b;
p = p-q;
r = &a;
r = (int*)(r-q);
printf("p = %p\n",p);
printf("r = %p\n",r);
}
当我编译代码时,我收到以下警告:
test.c:7:11: warning: assignment makes pointer from integer without a cast [enabled by default]
p = q-p;
^
现在,当我运行代码时,我得到了以下输出:
p = 0x1
r = 0x1
由于输出相同,任何人都可以解释警告的意义。提前谢谢你。
【问题讨论】:
-
两个指针的区别不是指针。这是
ptrdiff_t -
您通常会通过在
printf格式规范中添加“t”来打印它,例如“%td”。
标签: c pointers warnings pointer-arithmetic