为了自我充实,我正在构建一个小型链表库,这迫使我处理一个我几乎无法解释的问题。看看下面的例子,并假定new_item->data
是typedef结构内的空指针:从void指针获取int的问题
int *data = malloc(sizeof(int));
*data = 42;
MY_LIST *new_item = malloc(sizeof(*new_item));
new_item->data = &data;
// prints what looks like a memory address
printf(
"data: %i\n",
*((int *) new_item->data)
);
//prints 42
int data2 = *((int *) new_item->data);
printf(
"data2: %i\n",
*((int *) data2)
);
至于我(可能是废弃的)大脑所知道的,在这两种情况下我使用同样的铸造声明 - *((int *) new_item->data)
- 从它的容器派生整数。然而,当我在printf内部使用它时,我得到了一个内存地址。我对此有什么误解?
欢迎来到指针地狱。 –
调整你的_data_赋值为'new_item-> data = data;' – amdixon
不应该'MY_LIST * new_item = malloc(sizeof(* new_item));'是'MY_LIST * new_item = malloc(sizeof(new_item));'? 'sizeof(new_item)',而不是'sizeof(* new_item)'? –