查找同一块或数组中指针之间的距离

时间:2014-05-02 14:32:18

标签: c malloc

如果我有一块大小为char * a = malloc (10*sizeof(char*))的内存malloc' d, 我在这个区块内有两个char指针bc, 我怎样才能找到这两个指针之间的距离?

如果内存地址从0x00转到a+5,那么 我怎样才能准确地获得bc之间的距离?

1 个答案:

答案 0 :(得分:0)

如果bc是您的char*指针,请指向块a内的内存,您只需使用c-b查找距离他们之间。

考虑这个例子:

#include <stdio.h>
#include <stdlib.h>

int main() {

    char *a = calloc(10, 1);
    a[3] = 'h';
    a[6] = 'i';
    char *b = &a[3];
    char *c = &a[6];

    /* Print out the pointer address. */
    printf("%p\n", b);
    printf("%p\n", c);
    /* Subtracting the pointers gives a long int type. */
    printf("%ld\n", c-b);

    return 0;
}

运行此命令:

0xe4b013
0xe4b016
3

显然前两个会改变每次运行,但它会使距离正确,因为callocmalloc会给你一个连续的内存块或失败;它可以紧挨着彼此。它们为您提供指向该块中第一个地址的指针。

编辑以澄清:

指针具有某种类型,用于指针算术。这是一个巧合,这是询问char指针和char类型只有1字节长;如果类型为20字节,则指针算法将相同,返回3的结果。

本质上是“这些指针指向的大小有多少项它移动了”我们正在计算偏移量,返回的数字为address_2 - address_1 / size_of_the_type