Moh*_*ber 0 c pointers subtraction
#include <stdio.h>
int main() {
int *p = 100;
int *q = 92;
printf("%d\n", p - q); //prints 2
}
Run Code Online (Sandbox Code Playgroud)
上述程序的输出不应该是8吗?
相反,我得到2.
das*_*ght 12
除了未定义的行为,这是您使用指针算法获得的行为:当减去指针是合法的时,它们的差异表示指针之间的数据项的数量.在情况下int,您的系统上使用每四个字节int,即八个字节的方式,是指针之间的差异(8 / 4),其中工程出来2.
这是一个没有未定义行为的版本:
int data[10];
int *p = &data[2];
int *q = &data[0];
// The difference between two pointers computed as pointer difference
ptrdiff_t pdiff = p - q;
intptr_t ip = (intptr_t)((void*)p);
intptr_t iq = (intptr_t)((void*)q);
// The difference between two pointers computed as integer difference
int idiff = ip - iq;
printf("%td %d\n", pdiff, idiff);
Run Code Online (Sandbox Code Playgroud)