gpt4 book ai didi

c - 查找同一 block 或数组中指针之间的距离

转载 作者:行者123 更新时间:2023-11-30 19:46:41 25 4
gpt4 key购买 nike

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

如果内存地址从0x00开始比如说a+5 , 然后我怎样才能准确地得到 b 之间的距离和c

最佳答案

如果bc是您的char*指针,则指向 block 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 会给你一个连续的内存块,否则就会失败;彼此相邻就可以了。它们为您提供指向该 block 中第一个地址的指针。

编辑以澄清:

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

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

关于c - 查找同一 block 或数组中指针之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23430632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com