如果我有一块大小为char * a = malloc (10*sizeof(char*))
的内存malloc' d,
我在这个区块内有两个char指针b
和c
,
我怎样才能找到这两个指针之间的距离?
如果内存地址从0x00
转到a+5
,那么
我怎样才能准确地获得b
和c
之间的距离?
答案 0 :(得分:0)
如果b
和c
是您的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
显然前两个会改变每次运行,但它会使距离正确,因为calloc
和malloc
会给你一个连续的内存块或失败;它可以紧挨着彼此。它们为您提供指向该块中第一个地址的指针。
编辑以澄清:
指针具有某种类型,用于指针算术。这是一个巧合,这是询问char
指针和char
类型只有1
字节长;如果类型为20
字节,则指针算法将相同,返回3
的结果。
本质上是“这些指针指向的大小有多少项它移动了”我们正在计算偏移量,返回的数字为address_2 - address_1 / size_of_the_type
。