这段代码片段详细介绍了什么?

时间:2012-12-18 04:46:23

标签: c arrays pointers

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

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指向的同一地址,即数组b。所以基本上ptr3 = b

这是对的吗?有人可以解释一下吗?

1 个答案:

答案 0 :(得分:4)

*&ptr2为您提供指针ptr2的地址。虽然ptr2指向与b相同的位置,即该数组中第一个int的地址,ptr3将指向ptr2的位置b {1}}已存储。这意味着它在那一刻变为int**

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

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

           `b /^`

然后,代码继续将其强制转换为int *,原因不明确,并且用于void *声明的ptr3 {{1}} 。看起来对我来说错了。无论你在哪里找到它,都要忘掉那个来源。