关于如何理解指向指针的指针

1.

引用网络回答的一篇文章相关段落如下:

int i = 5, j = 6, k = 7;

int *ip1 = &i, *ip2 = &j;

现在我们可以这么写:

int **ipp = &ip1;

那么现在指针 ipp 指向了 ip1,ip1 指向了 i。*ipp 就是 ip1,**ipp 就是 i,或者说是 5。我们可以用我们熟悉的盒子箭头图来描述,像这样:

有兴趣学习交流c/c++的小伙伴可以进我的主页看看哦~

如果我们接着这么写:

*ipp = ip2;

我们就改变了 ipp 指向的那个指针(也就是 ip1),现在它指向 ip2 所指的地方。也就是说(ip1)现在它指向了 j:

我的疑问是:为什么在第二幅图里,ipp 还是指向 ip1 而不是 ip2?

最佳答案:

让我们暂时忘掉那些关于指针的各种类比。指针实际上存放的是内存的地址。

& 符号的意思是取地址,也就是返回一个对象在内存中的地址。

* 符号的意思是取得一个指针所指向的对象。 也就是如果一个指针保存着一个内存地址,那么它就返回在那个地址的对象。

所以当你这么写时 *ipp = ip2,实际上是把 ipp 存的地址所对应的对象,也就是 ip1 取到,然后把 ip2 存的值赋值给 ip1,也就是 j 的地址。

简单点就是:

&:取址。

* :取值。



作者:C语言编程
链接:https://www.jianshu.com/p/b556a7f528d2
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2.待梳理红字的思路。

3.引入一个代码加深理解

           

使用指向指针的指针输出一年中的12个月

#include<stdio.h> 
main()  
{  
    int i;  
    char **p;  
    char *month[]=  
    {  
        "January",   
        "February",   
        "March",   
        "April",   
        "May",   
        "June",   
        "July",   
        "August",   
        "September",   
        "October",   
        "November",   
        "December"   
    };                      /*给指针数组中的元素赋初值*/  
    for(i=0;i<12;i++)  
    {  
        p=month+i;    
        printf("%s\n",*p);      /*输出指针数组中的各元素*/  
    }  
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值