比较内存地址

use*_*819 4 c memory arrays pointers memory-management

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

char *ptr1; //points to a memory address in the array;
char *ptr2; //points to another memory address in the array;
Run Code Online (Sandbox Code Playgroud)

如果我这样做printf("%p\n%p\n", ptr1, ptr2);,它将打印内存地址为十六进制.

output:
0x601240
0x601274
Run Code Online (Sandbox Code Playgroud)

我如何将这些存储到变量中并且它们是可比较的,以便我可以分辨出哪个存储器地址在数组中排在第一位.

另一个问题:如果我执行%d打印内存地址,而不是%p:

output:
6296128
6296180
Run Code Online (Sandbox Code Playgroud)

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

Yu *_*Hao 11

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

if (ptr1 < ptr2)
Run Code Online (Sandbox Code Playgroud)

至于格式说明符,%d不是指针(虽然在某些实现中,它打印正确的值,你不应该使用它),%p用于void *指针:

printf("%p\n%p\n", (void *)ptr1, (void *)ptr2);
Run Code Online (Sandbox Code Playgroud)

  • 如果我知道内存地址在 0x700000 处停止(为了论证)并且我想检查指针是否指向允许的范围之外怎么办?`if (ptr1 &gt; 0x700000) return -1;` 是否有效? (2认同)