2015-04-03 79 views
0
int** p = (int*)malloc(sizeof(int)); 
p = NULL; 
printf("%10d", p); 
printf("%10d", &p); 

然后我得到 0和某个地址号双指针和重新分配空指针

但由于这是一个双指针,我不应该有P的值作为地址? 我如何在同一时间有两个值?

至更具体地, 因为p是第一指针 的地址,如果我有P = 32425,则意味着我已经指向的地址32425 但&运算符返回地址 的值从而p应该被& p 但它不是

是我的问题。也许我很困惑

回答

3

首先,请注意,malloc什么都不做(因为内存泄漏),因为你用NULL覆盖它。你也分配了错误的尺寸,你需要做p = (int **)malloc(sizeof(int *));。此外,使用%10d作为指针不太正确 - 使用%p代替。

话虽这么说:

第一printf将显示一个空指针(可能表示为0),因为你刚分配到NULLp等的NULL值就是你看到的。

第二个printf将显示p本身的地址。换句话说,一个int ***(一个三重指针)指向p。这不是NULL,当然,p必须在某处,因为它是一个堆栈分配变量。

+0

thx! malloc(sizseof(int *))就像声明指针变量一样? – 2015-04-03 18:30:20

+1

@이종연,不,它为指针变量指向的东西(恰好是另一个指针)分配空间。这与声明指针变量本身是分开的。 – bdonlan 2015-04-04 08:48:18