我如何比较固定大小的 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/