为什么是
int i;
int *p = &i;
对,同时
int i, *p;
*p = &i;
是错的?
*
声明(int *p = &i
)和表达式( )中使用的运算符有什么区别*p = &i
吗?
为什么是
int i;
int *p = &i;
对,同时
int i, *p;
*p = &i;
是错的?
*
声明(int *p = &i
)和表达式( )中使用的运算符有什么区别*p = &i
吗?
在您的第二个代码块中,这是:
int i, *p;
*p = &i;
可以固定为:
int i, *p;
p = &i;
p
仍然声明为指向 an 的指针int
,但您想存储 to 的i
地址p
。
在您的代码中,存储指向内存中某个区域*p = &i
的地址(因为您没有初始化它)。i
p
是的,有区别 - 第一种形式*
是类型定义的一部分int *
。
在第二种形式中,它是一个一元解引用运算符。第二个表达式也存在错误 - 当您分配给指针时,无需取消引用它。
(*p)
评估为 typeint
而p
评估为 type int *
; &i
计算为 type int *
。因此,将 int 变量 i 的地址分配给指针 p 应该读取p=&i;