初次学习双重指针的心得
来源:互联网 发布:乐视视频用户数据 编辑:程序博客网 时间: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
- 初次学习双重指针的心得
- 双重指针的用法
- 双重指针的用法
- 双重指针的疑惑
- 双重指针的用法
- 双重指针的使用
- 双重指针的使用
- 初次开发软件的心得
- 关于双重指针的用法
- 双重指针
- 双重指针
- 双重指针
- 双重指针
- 双重指针
- 学习C指针的心得随笔
- 双重指针变量的定义和使用
- 双重指针做函数参数的意义
- 解引用指针的双重间接
- 文章标题
- OGL实例和窗口系统关系和freeglut
- Css编译之Less入门
- 从《奋斗》到《欢乐颂》:十年之间,时代精神已变
- 【Android】ListView监听上下滑动(设置滚动监听判断ListView的滚动方向同时获取屏幕高度、ListView实际高度,判断是否需要展示返回顶部按钮(具体逻辑请看代码--附有详细注释)。
- 初次学习双重指针的心得
- glutSwapBuffers和glutPostRedisplay
- google-hosts
- Java finished with non-zero exit value 2 - Android Gradle
- LoadRunner
- caffe 卷积神经网络源码一些模糊点整理
- page,session,application的请求区别+page,session的参数放置与获取
- 敏捷开发
- ubuntu 安装 Jenkins