我如何比较固定大小的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
这些有效的内存地址(我的意思是这样安全吗?)
答案 0 :(得分:11)
十六进制值只是指针中地址的表示。要比较两个指针(指向同一个数组的元素或一个超过数组末尾的元素),您可以使用类似
的代码if (ptr1 < ptr2)
对于格式说明符,%d
不是指针(尽管在某些实现中,它打印正确的值,您不应该使用它),对%p
使用void *
指针:
printf("%p\n%p\n", (void *)ptr1, (void *)ptr2);
答案 1 :(得分:3)
0x601240
是十六进制表示,6296128
十进制表示,是完全相同的数字。同样,0x601274
等于6296180
。 0x
表示后面的内容采用十六进制格式。
在您的C / C ++代码中,可以将ptr1
和ptr2
的值与<
或>
进行比较,以确定哪一个在数组中排在第一位。 (这可以在不担心使用printf
表示它们的各种方式的情况下完成。)
答案 2 :(得分:2)
这两个输出是相同的,并且具有相同的值。第一个是十六进制,第二个是十进制。
您可以比较这两个指针和任何其他指针,如果您愿意,也可以对它们进行一些指针运算(减去它们等)。 但是,如果您的程序应该是便携式的,那么这可能非常微妙。例如,检查堆栈是否增大或减少,这可能会改变您想要进行的比较...