2010-05-14 59 views
0

快速的问题所以,我有这样的代码片段:关于指针

int * iPtr ; 
int * jPtr ; 
int i = 5, k = 7; 
iPtr = &i; 
jPtr = iPtr ; 

我刚开始学习关于指针,并需要得到清有些疑惑。

  1. 现在jPtr本质上也指向我吗?
  2. 我知道我可以通过使用* iPtr来改变i的值,但是我怎样才能改变jPtr指向的对象的值呢?
  3. 如何更改由jPtr指向的对象会影响iPtr指向的对象的值,而我呢?
+4

我不是关键,但你也许可以回答大多数问题的一个简单的std ::法院<< * IPTR等 – Adam 2010-05-14 02:39:49

回答

4
1000 1001 1002 1004   --> address location (note: just indicative) 
---------------------------- 
| 5 | 7 | 1000 | 1000 | 
| i | j | iPtr | jPtr | 
----------------------------- 
^^  |  | 
||________|  | 
|_________________| 

iPtr=&i; --> iPtr points to i ==> address of i is stored in iPtr ==> *iPtr contents of i 
jPtr=iPtr; ->jPtr points to i 
+0

+1(对于相当) – Adam 2010-05-14 02:38:12

1
  1. jPtr与iPtr具有相同的赋值,所以它不是基本指向我 - 它是。
  2. 同样的方法。 * jPtr = x。
  3. 他们是同一个对象。指针按地址工作,这意味着如果您将一个指针指向一个对象而另一个指向该指针,则它们都指向同一个对象。

至少,这就是我所记得的。我只是回到这个东西。

1
  1. 相同的:* jptr =值;
  2. 如果您更改jPtr指向的点(更改其保留的地址),它不会影响iPtr指向的内容。但只要它们指向同样的事情,然后改变的值(* jPtr = 5)表示对象指向IPTR也将改变
2
  1. 没错
  2. jPtr所指向的相同的存储器地址为iPtr在给定片段的末尾。因此,您可以使用*jPtr*iPtr更改i
  3. 由于jPtr持有i的内存地址,如果你改变*jPtr,你正在改变i作为一个直接结果,改变*iPtr值。
1
  1. *jptr=42
  2. 是的,这是非常相同的整数变量。
0

问题1

是。

问题2

*jPtr = ... 

问题3

不会。

2

1:是的,这被称为指针别名。 2:与使用* iPtr更改值相同,可以使用* jPtr更改i的值。

3:由于指针是别名,意思是指向同一个对象,改变iPtr指向的对象的值,也会改变jPtr指向的对象的值,因为它们指向相同的对象目的。