这是我教科书中的问题的一部分。我无法确切地知道它的作用以及它是如何做到的,所以我来寻求帮助。
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
。
这是对的吗?有人可以解释一下吗?
答案 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}} 。看起来对我来说错了。无论你在哪里找到它,都要忘掉那个来源。