这是我课本上的一个问题。我不知道它到底是做什么的,怎么做的,所以我来寻求帮助。
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
。这是对的吗?有人能解释吗?
最佳答案
*&ptr2
提供指针的地址。当ptr2
指向与ptr2
相同的位置,即数组中第一个int的地址时,b
将指向存储ptr3
中地址的ptr2
位置。这意味着它在那一刻变成一个b
。
类似这样,虽然要小心,ptr2和b具有相同的值,但在内存中是不同的:int**
`b /^`
然后,代码继续将其转换为一个
ptr3 -> ptr2 -> 1,2,3,4,5
,原因是没有真正意义的,并且在分配给声明为int *
的void *
时使用。我觉得很不对劲。不管你在哪里找到它,忘掉那个源头。关于c - 该代码段的详细作用是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13926442/