所以,我有这个代码片段:
int * iPtr ;
int * jPtr ;
int i = 5, k = 7;
iPtr = &i;
jPtr = iPtr ;
我刚刚开始学习指针,需要清除一些疑问。
答案 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)
jPtr
指向与给定片段末尾的iPtr
相同的内存地址。因此,您可以使用i
或*jPtr
更改*iPtr
。jPtr
保留i
的内存地址,如果您更改*jPtr
,则您正在更改i
并直接导致更改{{1}的值}}。答案 2 :(得分:2)
1:是的,这称为指针别名。
2:与使用* iPtr更改值的方式相同,您可以使用* jPtr更改i的值。
3:由于指针是别名的,意味着指向同一个对象,更改iPtr指向的对象的值,也会更改jPtr指向的对象的值,因为它们指向同一个对象
答案 3 :(得分:1)
至少,这是我记得它的方式。我刚刚回到这个问题。
答案 4 :(得分:1)
答案 5 :(得分:1)
*jptr=42
答案 6 :(得分:0)
问题1
是
问题2
*jPtr = ...
问题3
不会。