两个C void指针是否具有相同数据的不同内存对象?

Nat*_*ate 1 c pointers

例如:

void *p1 = someStringPointer;
void *p2 = p1;
Run Code Online (Sandbox Code Playgroud)

虽然这是两个独特的指针,但鉴于它们都指向相同的值,它们仍然是不同的内存对象吗?

May*_*yur 6

如果您打印的地址p1p2

printf("%p\n", (void *) &p1);
printf("%p\n", (void *) &p2);
Run Code Online (Sandbox Code Playgroud)

它们有不同的地址,所以它们是不同的内存对象.

  • 打印2`void*`并看到不同的文本本身并不足以知道2'void*`指向不同的位置.尽管平坦记忆模型的文本差异已足够,但使用`printf("%d \n",&p1 ==&p2);`来评估等效性.在这种情况下,结果为0,因为对象`p1,p2`是不同的,因此它们的地址也是如此. (2认同)