【发布时间】:2009-10-10 20:14:06
【问题描述】:
int *w;
int **d;
d = &w;
**d 究竟存储了什么?
【问题讨论】:
int *w;
int **d;
d = &w;
**d 究竟存储了什么?
【问题讨论】:
赋值后,**d 与*w 相同。 d 是一个指向整数的指针;指向它指向的整数的指针是w。所以*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 并且刚刚声明 整数 *w int **d,除了: int *w 是指向 int 的指针,而 int **d 是指向指向 int 的指针,但绝不会说 d 将存储 w 的地址。
【讨论】: