2

为什么是

int i;
int *p = &i;

对,同时

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

是错的?

*声明(int *p = &i)和表达式( )中使用的运算符有什么区别*p = &i吗?

4

2 回答 2

3

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

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

可以固定为:

int i, *p;
p = &i;    

p仍然声明为指向 an 的指针int,但您想存储 to 的i地址p

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

于 2013-07-14T23:48:21.233 回答
2

是的,有区别 - 第一种形式*是类型定义的一部分int *

在第二种形式中,它是一个一元解引用运算符。第二个表达式也存在错误 - 当您分配给指针时,无需取消引用它。

(*p)评估为 typeintp评估为 type int *; &i计算为 type int *。因此,将 int 变量 i 的地址分配给指针 p 应该读取p=&i;

于 2013-07-14T23:46:37.303 回答