声明中使用的*运算符(int * p =& i)和表达式(* p =& i)之间是否有任何区别

时间:2013-07-14 23:42:52

标签: c pointers variable-assignment

为什么

int i;
int *p = &i;

对,

int i, *p;
*p = &i;

错了?

声明(*)和表达式(int *p = &i)中使用的*p = &i运算符之间是否存在差异?

2 个答案:

答案 0 :(得分:3)

在你的第二个代码块中,这个:

int i, *p;
*p = &i;

可以修复为:

int i, *p;
p = &i;    

p仍被声明为指向int的指针,但您希望将i的地址存储到p

在您的代码中,*p = &ii的地址存储到p指向的内存中的某个区域(因为您没有初始化它)。

答案 1 :(得分:2)

是的,存在差异 - 第一种形式*是类型定义int *的一部分。

在第二种形式中,它是一元解除引用运算符。第二个表达式也有错误 - 当你指定一个指针时,不需要取消引用它。

(*p)评估为intp评估为int *; &i评估为键入int *。因此,将int变量i的地址分配给指针p应该是p=&i;