0

这是我教科书中问题的一部分。我无法确切地弄清楚它的作用以及它是如何做到的,所以我来寻求帮助。

int a = 5, b[] = {1, 2, 3, 4, 5};
int *ptr1, *ptr2;
void *ptr3;
ptr1 = &a;
ptr2 = b;
ptr3 = (int*) &ptr2;

我不明白这条线

ptr3 = (int*) &ptr2;

我最好的猜测是,它ptr3被分配为一个 int 指针,它现在指向与现在相同的地址,ptr2即 array b。所以基本上ptr3 = b

这个对吗?有人可以解释吗?

4

1 回答 1

4

*&ptr2给你指针的地址ptr2。虽然ptr2指向与 相同的位置b,即该数组中第一个 int 的地址,但ptr3将指向存储ptr2地址 in的位置。这意味着它在那一刻b变成了一个。int**

有点像这样,虽然要小心,ptr2 和 b 具有相同的值但在内存中是不同的:

ptr3 -> ptr2 -> 1,2,3,4,5

           `b /^`

然后代码继续将其转换为一个int *原因,这实际上没有意义,并且用于对void *声明的赋值ptr3。在我看来相当错误。无论你在哪里找到它,忘记那个来源。

于 2012-12-18T04:50:56.627 回答