为什么
int i;
int *p = &i;
对,
int i, *p;
*p = &i;
错了?
声明(*
)和表达式(int *p = &i
)中使用的*p = &i
运算符之间是否存在差异?
答案 0 :(得分:3)
在你的第二个代码块中,这个:
int i, *p;
*p = &i;
可以修复为:
int i, *p;
p = &i;
p
仍被声明为指向int
的指针,但您希望将i
的地址存储到p
。
在您的代码中,*p = &i
将i
的地址存储到p
指向的内存中的某个区域(因为您没有初始化它)。
答案 1 :(得分:2)
是的,存在差异 - 第一种形式*
是类型定义int *
的一部分。
在第二种形式中,它是一元解除引用运算符。第二个表达式也有错误 - 当你指定一个指针时,不需要取消引用它。
(*p)
评估为int
,p
评估为int *
; &i
评估为键入int *
。因此,将int变量i的地址分配给指针p应该是p=&i;