c - 任意指针之间的距离

标签 c memory

我正在尝试打印两个指针之间的距离,但我发现有时代码无法正常工作。

#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 未在您的程序中使用,可能会被优化掉。无论如何,这是实现细节,编译器甚至可以自由更改内存中 xy 对象的顺序。

关于c - 任意指针之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104082/

相关文章:

c - memcpy 的内部实现是如何工作的?

c++ - 基本C++头文件问题

c - 提供下面提到的 typedef 和 #define 行为差异的原因

c - 为什么我在这里遇到段错误?

c - 使用 fscanf 从文件中读取单词

c++ - 指针和引用问题

memory - 当第二个维度的大部分为空时,最节省内存的可空向量数组是什么?

c - *** 错误 `./a.out' : realloc(): invalid next size: 0x00000000009c4010 ***

比较十六进制字符数组

android - 获取 java.lang.OutOfMemoryError 异常?