这是我课本上的一个问题。我不知道它到底是做什么的,怎么做的,所以我来寻求帮助。

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/

10-09 21:35