初次学习双重指针的心得

      1 #include <stdio.h>
      2 int main()
      3 {
      4     int i;
      5     char *name[] = {"Hello","world","end"};
      6     char **p_name;
      7     char *p;
      8     printf("%d\n",sizeof(p));
      9 
     10     printf("name[0] : %p\n",name[0]);
     11     printf("name[1] : %p\n",name[1]);
     12     printf("name[2] : %p\n",name[2]);
     13     p_name = &name[0];
     14     printf("&name[0] : %p\n",p_name);
     15     p_name = &name[1];
     16     printf("&name[1] : %p\n",p_name);
     17     p_name = &name[2];
     18     printf("&name[2] : %p\n",p_name);
     19 
     20     p_name = name;
     21     for (i=0; i<3; i++){
     22         printf("%p ",p_name+i);
     23         printf("%s ",*(p_name+i));
     24         printf("\n");
     25     }
     26     return 0;
     27 }
运行结果:
4
name[0] : 0x80485b0
name[1] : 0x80485b6
name[2] : 0x80485bc
&name[0] : 0xbf991f2c
&name[1] : 0xbf991f30
&name[2] : 0xbf991f34
0xbf991f2c Hello 
0xbf991f30 world 
0xbf991f34 end 
    由运行结果可以得出:"Hello","world","end"3个字符串的首地址。由于name定义的是一个指针数组,所以name[0]、name[1]、name[2]中存储的就是3个字符串对应的首地址。
    再次定义一个二级指针,二级指针也是指针,只不过二级指针的变量值是指针的地址,而不像一级指针的变量值存放的是非指针的地址。
将p_name指向数组name的首地址,p_name = name,也可以写成这种:p_name = &name[0]。可能有些人不大理解这样赋值的含义,但是大家反过来想一想一维指针的指向就清楚了。举个简单例子:
<pre name="code" class="cpp">int age[10];
char *ptr;
ptr = age;/*ptr = &age[0]*/
 
    此时p_name存的就是0xbf991f2c,由于在本编译器中的指针的长度是4位,所以在做p_name+i时就会移动i个指针长度的位置。
</pre><pre name="code" class="cpp">
</pre><pre name="code" class="cpp">
</pre><pre name="code" class="cpp">

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值