初次学习双重指针的心得

来源:互联网 发布:乐视视频用户数据 编辑:程序博客网 时间:2024/06/05 02:14
      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 }
运行结果:
4name[0] : 0x80485b0name[1] : 0x80485b6name[2] : 0x80485bc&name[0] : 0xbf991f2c&name[1] : 0xbf991f30&name[2] : 0xbf991f340xbf991f2c 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">

0 0
原创粉丝点击