CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

大家关于二级指针

楼主santaga(lynn)2001-05-16 18:15:00 在 C/C++ / C语言 提问

int**   tptr  
  int*   ptr  
  int   a   =   3  
  int   b   =   4  
  ptr   =   &a  
  tptr   =   &ptr   //此时tptr   =?  
  如果  
  *tptr   =   &b   //此时tptr   =?   如果tptr   改变了,那么   ptr   =?,   *ptr   =?  
                       
   
  能不能详细讲解一下二级指针的原理  
   
   
  问题点数:24、回复次数:6Top

1 楼summer_xzw(~~~曾经沧海~~~)回复于 2001-05-16 18:42:00 得分 0

这种题目自己运行一下不就知道了吗?Top

2 楼lj9852(Loading)回复于 2001-05-16 18:59:00 得分 0

呵呵,这样这么讲?自己写些程序测试一下不就搞定了吗Top

3 楼liu_feng_fly(笑看风云 搏击苍穹 衔日月)回复于 2001-05-16 19:03:00 得分 4

tptr   =   &ptr   //此时tptr   =?     ptr的地址  
  *tptr   =   &b   //此时tptr   =?   如果tptr   改变了,那么   ptr   =?,   *ptr   =?  
  tptr不变                                             tptr   改变了   不影响别的  
   
   
  Top

4 楼starsoft007(星软)回复于 2001-05-21 18:51:00 得分 5

二级指针就是指向指针的指针了  
  如你上面说的ptr=&a,ptr里装着a变量的地址.再tptr=&ptr  
  那么tptr里就装着变量ptr的地址,所以tptr就是二级指针了  
  如果还不明白的话,可以这样想  
  假设甲知道乙的地址,而乙又知道丙的地址,那么丙就是a了  
  而乙就是ptr,甲就是tptr了.  
  不知这样说你能不能明白.  
  Top

5 楼whhif(Phenix)回复于 2001-05-21 20:04:00 得分 15

   
  终于到了这个问题了!  
  讲到二级指针的问题,首先得谈一谈数组的  
  内存存储方式,  
  例如:  
  int   a[10];  
  首先,再内存中开辟22个字节的空间,  
  其中,前两个字节用来装数组a的首地址,  
  其他20字节用来装整数,  
  数组名是一个指针型符号常量,  
  虽说符号常量是在C++中才被提出的,  
  但数组名是个例外,例外的还有函数名,  
  实际上二级指针指向的是一个二维数组,  
  例如:  
  int   a[2][3];  
  其实,二维数组中存放的是两个一维数组,  
  这里我把a拆成三个数组b[2],c[3],d[3];  
  同一维数组一样,  
  首先在内存中开辟两个字节来存放数组名a;  
  a还是指针型符号常量;  
  这里a指向的是b数组的首地址,  
  然后开辟四个字节存放b数组,  
  然后再开辟12个字节来分别存放c和d数组;  
  b[0]指向的是c数组,  
  b[1]指向的是d数组,  
  我说的已经够清楚了吧.  
  二级指针和二维数组的情形一样,  
  因此,可以定义  
  int   **a;  
  int   b[10][10];  
  a=b;  
  你的这个问题是:  
  假设(&a=A;&b=B;)  
  int**   tptr  
  int*   ptr  
  int   a   =   3  
  int   b   =   4  
  ptr   =   &a  
  tptr   =   &ptr   //此时tptr   =存放指针变量ptr的地址;    
  如果  
  *tptr   =   &b   //此时tptr   =不变,如果tptr   改变了,那么   ptr   =不变,   *ptr   =3;  
  相当于  
  int   array[2][1]={3,4};  
  int   **tptr;  
  int   *ptr;  
  ptr=array[0][0];  
  tptr=array[1];\\tptr改变了,不关其它变量的事;  
  我相我是应该讲明白了吧,你明白了吗?Top

6 楼whhif(Phenix)回复于 2001-05-22 21:41:00 得分 0

补充一点,其实是写错了,  
  tptr=a;  
  也就是array[1]的地址.  
  不是tptr=array[1];Top

相关问题

  • 二级菜单指针的获得!
  • 关于二级指针释放的BUG?
  • 二级指针 如何转换成 二维数组的指针?
  • 为什么要用二级指针???困惑中!!!
  • 关于二级指针的问题,求助!
  • 问一个关于二级指针的问题,很初级
  • public继承的二级指针转换问题(高手进)
  • 请问,如何用realloc调整二级指针的大小
  • 一个二级指针的问题,求教!
  • 关于结构体内的二级指针的问题?

关键词

  • 指针
  • 内存
  • tptr
  • 数组
  • 二级
  • ptr
  • 地址
  • 符号常量
  • 指向
  • 就是

得分解答快速导航

  • 帖主:santaga
  • liu_feng_fly
  • starsoft007
  • whhif

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo