如何理解指向指针的指针
2017-11-12 17:58
246 查看
引用文章相关段落如下:
C
int i = 5, j = 6, k = 7;
int *ip1 = &i, *ip2 = &j;
现在我们可以这么写:
C
int **ipp = &ip1;
那么现在指针 ipp 指向了 ip1,ip1 指向了 i。*ipp 就是 ip1,**ipp 就是 i,或者说是 5。我们可以用我们熟悉的盒子箭头图来描述,像这样:
如果我们接着这么写:
C
*ipp = ip2;
我们就改变了 ipp 指向的那个指针(也就是 ip1),现在它指向 ip2 所指的地方。也就是说(ip1)现在它指向了 j:
我的疑问是:为什么在第二幅图里,ipp 还是指向 ip1 而不是 ip2?
& 符号的意思是取地址,也就是返回一个对象在内存中的地址。
* 符号的意思是取得一个指针所指向的对象。 也就是如果一个指针保存着一个内存地址,那么它就返回在那个地址的对象。
所以当你这么写时 *ipp = ip2,实际上是把 ipp 存的地址所对应的对象,也就是 ip1 取到,然后把 ip2 存的值赋值给 ip1,也就是 j 的地址。
简单点就是:
&:取址。
* :取值。
C
int i = 5, j = 6, k = 7;
int *ip1 = &i, *ip2 = &j;
1 2 | inti =5,j =6,k =7; int *ip1= &i,*ip2= &j; |
C
int **ipp = &ip1;
1 | int**ipp= &ip1; |
如果我们接着这么写:
C
*ipp = ip2;
1 | *ipp= ip2; |
我的疑问是:为什么在第二幅图里,ipp 还是指向 ip1 而不是 ip2?
最佳答案:
让我们暂时忘掉那些关于指针的各种类比。指针实际上存放的是内存的地址。& 符号的意思是取地址,也就是返回一个对象在内存中的地址。
* 符号的意思是取得一个指针所指向的对象。 也就是如果一个指针保存着一个内存地址,那么它就返回在那个地址的对象。
所以当你这么写时 *ipp = ip2,实际上是把 ipp 存的地址所对应的对象,也就是 ip1 取到,然后把 ip2 存的值赋值给 ip1,也就是 j 的地址。
简单点就是:
&:取址。
* :取值。
相关文章推荐
- 如何理解指向指针的指针?
- 如何理解指向指针的指针
- 所谓"在表达式中,数组名总是被转换为指向该数组第一个元素的指针"应该如何理解?
- 如何理解指向指针的指针?
- 如何理解指向指针的指针?
- 基类指针指向子类对象改如何理解
- 如何理解指向指针的指针?
- 如何理解指向指针的指针?
- 如何理解指向指针的指针?
- 如何理解指向指针的指针?
- 如何理解指向指针的指针?
- 如何理解指向指针的指针?(转载)
- 如何理解指向指针的指针
- 问题:如何理解指向指针的指针?
- 如何理解字符串赋值给指针与数组的区别
- (转 )Delphi指针如何指向使用with开域语句创建的无名组件对象
- 指针二次理解(第三篇)如何安全的使用指针
- JavaScript中this指针指向的彻底理解
- 如何打印函数指针指向的函数名
- 父类指针指向子类对象的理解