2012-10-19 220 views
2

我看到两个选项以指定一个指针初始化指针

1.

int p=5; 
int *r=&p 

2.

int p 
int *r; 
r=&p; 

为什么他们在1使用带有星号 ,并在两个不?

+0

1日一个是初始化。注:第二个是分配 – CCoder

回答

7

你应该阅读:

int *r [...] 

为:

(int *) r [...] 

类型的rint *。如果你这样看,你会发现两个版本都是一样的。

+0

哦,我想了解即时通讯一个问题 会有什么happend我,我会做到这一点 INT磷; int * r; * r =&p; ? – user1758424

+0

'r'的类型为'int *',所以'* r'的类型为'int'。你应该从你的编译器得到一个警告(如果没有,请确保你已经打开了警告)。 '* r =&p'试图给int('* r')分配一个指针('&p')。这不是便携式/安全的。 – Mat

+0

谢谢你,帮助我很多! – user1758424

2

这两种选择实际上是相同的。第一个就是文本。

星号在用于像int *r这样的声明中时,告诉编译器变量r指针。

0

情况2:int *r是未初始化的指针到int的声明; r = &p是一个赋值给指针的赋值。

案例1:int *r=&p是一个指向int的指针的声明,该指针的初始化地址为p

0

第二个完全一样。第一个示例声明变量,并且也一次性指定值声明部分需要*,因为它指定此变量将存储指向int值的指针。该赋值部分不需要这种东西,因为变量r已经宣布是一个指针

0

因为在1. int *r=&p是声明。

2. r=&p未在声明中。

asterix(*)表示指针的数据类型。

欲了解更多信息,可以阅读here