我正在尝试打印两个指针之间的距离,但我发现有时代码无法正常工作。
#include <stdio.h>
#include <math.h>
/**
* Print the distance between 2 pointers
*/
void distance(int * a0, int * a1){
size_t difference = (size_t) a1 - (size_t) a0;
printf("distance between %p & %p: %u\n" ,a0, a1, abs((int) difference));
}
尝试这个非常有效!!
int main(void){
int x = 100;
int y = 3000;
distance(&x, &y);
return 0;
}
打印(示例):
distance between 0028ff18 & 0028ff14: 4
但是这段代码开始出错
int main(void){
int x = 100;
int p = 1500;
int y = 3000;
distance(&x, &y);
p = p + 2; // remove unused warning
// &p
return 0;
}
打印(示例):
distance between 0028ff18 & 0028ff14: 4
当它必须打印 8
因为一个整数分隔这个值时!
但如果我取消注释 //&p
,它会再次起作用。
就好像变量p
不存在,直到它的内存地址被使用。
我在 Windows 7(64 位)上使用 gcc 4.9.3
最佳答案
p
未在您的程序中使用,可能会被优化掉。无论如何,这是实现细节,编译器甚至可以自由更改内存中 x
和 y
对象的顺序。
关于c - 任意指针之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104082/