关于指针的快速问题

时间:2010-05-14 02:14:55

标签: c++

所以,我有这个代码片段:

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

我刚刚开始学习指针,需要清除一些疑问。

  1. 现在jPtr基本上也指向了我?
  2. 我知道我可以使用* iPtr更改i的值,但是如何更改jPtr指向的对象的值?
  3. 如何更改jPtr指向的对象会影响iPtr指向的对象的值,并且i?

7 个答案:

答案 0 :(得分: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 

答案 1 :(得分:2)

  1. 是的
  2. jPtr指向与给定片段末尾的iPtr相同的内存地址。因此,您可以使用i*jPtr更改*iPtr
  3. 由于jPtr保留i的内存地址,如果您更改*jPtr,则您正在更改i并直接导致更改{{1}的值}}。

答案 2 :(得分:2)

1:是的,这称为指针别名。

2:与使用* iPtr更改值的方式相同,您可以使用* jPtr更改i的值。

3:由于指针是别名的,意味着指向同一个对象,更改iPtr指向的对象的值,也会更改jPtr指向的对象的值,因为它们指向同一个对象

答案 3 :(得分:1)

  1. jPtr与iPtr具有相同的赋值,所以它实际上并不是指向我 - 它是。
  2. 同样的道理。 * jPtr = x。
  3. 他们是同一个对象。指针按地址工作,这意味着如果您将一个指针指向一个对象而另一个指针指向该指针,则它们都瞄准同一个对象。
  4. 至少,这是我记得它的方式。我刚刚回到这个问题。

答案 4 :(得分:1)

  1. 相同:* jptr = value;
  2. 如果更改jPtr指向的内容(更改其保存的地址),则不会影响iPtr指向的内容。但只要它们指向同一个东西,那么改变值(* jPtr = 5)意味着iPtr指向的对象也将改变

答案 5 :(得分:1)

  1. *jptr=42
  2. 是的,它是完全相同的整数变量。

答案 6 :(得分:0)

问题1

问题2

*jPtr = ...

问题3

不会。