比较内存地址

标签 c arrays pointers memory memory-management

我如何比较固定大小的 char 数组中的两个内存地址?假设我有两个指针,每个指针指向数组中的不同内存位置:

char *ptr1; //points to a memory address in the array;
char *ptr2; //points to another memory address in the array;

如果我执行 printf("%p\n%p\n", ptr1, ptr2); 然后它将内存地址打印为十六进制。

output:
0x601240
0x601274

我如何将这些存储到变量中,它们是否具有可比性,以便我可以判断哪个内存地址在数组中排在第一位。

另一个问题: 而不是 %p 如果我做 %d 来打印我得到的内存地址:

output:
6296128
6296180

这些也是有效的内存地址吗(我的意思是这样使用安全吗)?

最佳答案

十六进制值只是指针中地址的表示。要比较两个指针(指向同一数组的元素或指向数组末尾的元素),您可以使用类似

的代码
if (ptr1 < ptr2)

至于格式说明符,%d 不适用于指针(尽管在某些实现中,它会打印出正确的值,您不应该使用它),请使用 %p 用于 void * 指针:

printf("%p\n%p\n", (void *)ptr1, (void *)ptr2);

关于比较内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20466077/

相关文章:

C - 释放指向指针的指针

C - 我不明白为什么这段代码没有输出我选择的值。 (指针)

C 文件指针两次返回文件内容

c++ - 直接访问PCI串口

php - 选择列表作为数组变量一旦保存到 MySQL 就无法重新保存为未选择

javascript - 在 Javascript 中构建二维数组

arrays - 如何比较JSON格式的数组VALUE和KEY来创建新的数组?在Angular 5中

c - 使用 -std=c99 编译时,struct ip_mreq 消失

c - 如何将数据从 C 导出到 MATLAB(在不同机器上)

c - 为什么编译器会假设这些看似相等的指针不同?