这是代码:
#include <stdio.h>
int main()
{
int i = 3;
int *p = &i;
p - (p - 1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器(gcc)警告外部减法的整数溢出:
[user@comp c]$ gcc foo.c
foo.c: In function ‘main’:
foo.c:6:5: warning: integer overflow in expression [-Woverflow]
p - (p - 1);
^
Run Code Online (Sandbox Code Playgroud)
在我的机器上获得了正确的结果1.
为什么?
这是因为指针地址是无符号整数但是ptrdiff_t是一个有符号的int并且无法处理那些大数字?
我看到了
p - (p);
Run Code Online (Sandbox Code Playgroud)
和
p - (p + 1);
Run Code Online (Sandbox Code Playgroud)
不要引起溢出.
我试图了解幕后发生的事情.这是我关于stackoverflow的第一个问题,如果我的问题可以改进,请告诉我.