int *w;
int **d;
d = &w;
“d”存储到底是什么?
赋值后,**d
与 *w
相同。 d
是一个指向整型指针的指针;它所指向的整型指针是 w
。因此,*d
是 w
,**d
是 *w
。
int **
表示 “指向一个指向 int
的指针”(也称为双重指针)。
现在,int *w
只表示一个指向 int
的指针,因此赋值语句 d = &w
表示:“将 w
的地址(它本身就是一个指针/地址)分配给 d
。”
**d的值与*w的值相同;*d等于保存在w中的指针值;因为d是指向指向int的指针,所以必须解除两次引用才能获得实际值。
w存储一个int的地址。d存储一个指向int的指针的地址(除非在这种情况下它存储了一个随机值,因为它没有被赋值),在这种情况下它存储了d的地址。
**d 是一个指向 int 指针的指针,因此当你说 d=&w 时,**d 将具有指针 *w 的地址,但除非你已经声明了 d=&w 并且只是声明了 int *w int **d,否则它没有任何意义,除了: int *w 是一个指向 int 的指针,int **d 是一个指向 int 指针的指针,但这并不意味着 d 将存储 w 的地址。
**d
和*w
并不相同 -- 至少它们的值不同。虽然我想我知道你想说什么(它们最终都指向同一个变量),但我认为那有点误导。 - Noldorin**d
,可能会出现分段错误或一些垃圾整数值,因为w
未正确初始化。 - qunying