CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

指针指向“指向指针的指针”,faint...

楼主ScorpioZZR(小天使)2003-08-03 13:23:10 在 C/C++ / C语言 提问

程序是写对了,不过自己迷糊了.....越想越晕......  
  change函数中,我用pt指向*p——p这里是数组指针,那么pt岂不是变成了指向指针的指针了?  
  那么定义pt的时候怎么pt应该写成int   **pt吗?  
  这样写是否有点什么“基类型”不对么?  
  我搞晕了.....连题目都取晕了.......  
  很乱ing......  
  求助高手指点.....  
  (详细解答者一次性重赏10分)  
   
   
   
  #include   <stdio.h>    
   
  void   print   (int   (*p)[5])  
  {  
  int   i,j;  
  for   (i=0;i<5;i++)  
  {  
  for   (j=0;j<5;j++)  
  {  
  printf("%5d",*(*(p+i)+j));  
  }  
  printf("\n");  
  }  
  }  
   
  void   change(int   (*p)[5])   /*把最大数放中间进行调换*/  
  {  
  int   i,j,max,temp,*pt;  
  max=**p;  
  pt=*p;  
  for   (i=0;i<5;i++)  
  for(j=0;j<5;j++)  
  {  
  if   (max<*(*(p+i)+j))  
  {  
  max=*(*(p+i)+j);  
  pt=*(p+i)+j;  
  }  
  }  
  temp=p[2][2];  
  p[2][2]=*pt;  
  *pt=temp;  
  }  
   
  void   main()  
  {  
  int   arr[5][5]={{35,34,33,32,31},{30,29,28,27,26},{25,24,23,22,21},{20,19,18,17,16},{15,14,13,12,11}};  
  puts("Matrix:");  
  print(arr);  
  change(arr);  
  puts("Now,Matrix:");  
  print(arr);  
  } 问题点数:10、回复次数:15Top

1 楼bluei(蓝之我)回复于 2003-08-03 13:27:39 得分 0

还是可以理解的。Top

2 楼MaiCle(原来小日本连畜生都不如)回复于 2003-08-03 13:34:15 得分 0

用指针指向二维数组。没什么难度的。Top

3 楼ScorpioZZR(小天使)回复于 2003-08-03 14:53:41 得分 0

怎么没人详细解答一下呢?我晕Top

4 楼LoopyPuzzle(浪子无名)回复于 2003-08-03 15:19:34 得分 1

其实是很好理解的,指向整形的指针变量你可以理解吧?它不过是一个变量,只不过这个变量存储的是一个整形变量的地址,通过这个指针你就可以访问这个整形变量。指向指针的指针也是这个道理,只不过这个指针指向的是一个指针变量的地址,通过它可以访问该指针变量,进而访问其他的变量。在你的p指针数组里,你可以把p理解为一个二维数组,p为数组名,那么pt=*p则表示pt指向二维数组中第一行的首地址,你也可以理解为一个一维数组的数组名。所以pt的定义为:int   *pt。建议你好好将书中讲述指针的这一章仔细看一下,认真理解。Top

5 楼crcr(游侠)回复于 2003-08-03 15:40:52 得分 1

#include   <stdio.h>    
   
  void   print   (int   (*p)[5])  
  {  
  int   i,j;  
  for   (i=0;i<5;i++)  
  {  
  for   (j=0;j<5;j++)  
  {  
  printf("%5d",*(*(p+i)+j));  
  }  
  printf("\n");  
  }  
  }  
   
  void   change(int   (*p)[5])   /*把最大数放中间进行调换*/  
  {  
  int   i,j,max,temp,*pt;     //pt是一个一级指针,*只是说明它是一个指针类型   ,  
  max=**p;       //           **P是该数组的第一个数,因为P是首址            
  pt=*p;                             //PT是一个一级指针,不是一个指向指针的指针,因为主P是一个指向一个二维数组的行指针,它是行指针,(这里PT和P是一样的,)例如,PT+1,是指向了下一行,而不   是指向了下一个数,  
  for   (i=0;i<5;i++)  
  for(j=0;j<5;j++)  
  {  
  if   (max<*(*(p+i)+j))       //如果MAX<数组中的一个数,找最大数J代表是列指针,I是行指针,  
  {  
  max=*(*(p+i)+j);     //把该数賳给MAX  
  pt=*(p+i)+j;           //地址赋给PT  
  }  
  }                                                              
  temp=p[2][2];                                                                 //保存中间的数  
  p[2][2]=*pt;                                     //把找到   的最大数赋给最中间  
  *pt=temp;                                           //把中间的放在要找到   的数的位置   上  
  }  
   
  void   main()  
  {  
  int   arr[5][5]={{35,34,33,32,31},{30,29,28,27,26},{25,24,23,22,21},{20,19,18,17,16},{15,14,13,12,11}};  
  puts("Matrix:");  
  print(arr);  
  change(arr);  
  puts("Now,Matrix:");  
  print(arr);  
  }  
  Top

6 楼leialen(阿伦)回复于 2003-08-03 15:59:50 得分 1

http://www.csdn.net/develop/article/14/14165.shtmTop

7 楼leialen(阿伦)回复于 2003-08-03 16:08:03 得分 1

http://www.csdn.net/develop/article/14/14177.shtmTop

8 楼pengzhenwanli(紫气日盈)回复于 2003-08-03 17:28:25 得分 0

我以前解释了那么多,白费了!  
  Top

9 楼ScorpioZZR(小天使)回复于 2003-08-03 17:48:32 得分 0

pengzhenwanli:  
  嘘!小声点~~~~~~  
  你解释的偶都接收了呀~~这个,这个是新问题嘛~~~~~~  
   
  http://expert.csdn.net/Expert/topic/2104/2104072.xml?temp=.3555719  
   
  ~~~~>>_<~~~~~  
   
  偶不就是笨了点嘛......Top

10 楼fqcd555(love violet)回复于 2003-08-03 17:51:14 得分 0

晕啊。Top

11 楼ScorpioZZR(小天使)回复于 2003-08-03 18:09:29 得分 0

leialen:  
  你的大作?  
  fqcd555:  
  你晕什么?Top

12 楼pengzhenwanli(紫气日盈)回复于 2003-08-03 21:55:01 得分 6

void   change(int   (*p)[5])   /*把最大数放中间进行调换*/  
  {  
  int   i,j,max,temp,*pt;  
  max=**p;//p是指向数组的得指针提领*p,这样不是数组第一行的首地址吗?  
  相当于  
    int   **p1;  
  int   *p2;  
  p2   =   *p1;这样p1被提领了一次,是另一个地址,不用p2只用什么指?  
  再提领**p1就是*p1指向的地址的内存放的值。  
  我在你的另一个帖子里解释了很长时间。  
   
   
  如果你再不结帖,我再也不回答你的问题。Top

13 楼ScorpioZZR(小天使)回复于 2003-08-03 22:38:26 得分 0

谢谢你阿,紫气大哥!:——————Top

14 楼ScorpioZZR(小天使)回复于 2003-08-03 22:47:06 得分 0

唉,可怜我被误会了阿!  
  我可是守法公民呐Top

15 楼ScorpioZZR(小天使)回复于 2003-08-03 22:57:51 得分 0

我刚看了我的问题记录,发贴6个,结了四个,已经很守法了呀,唉,我可是良民阿Top

相关问题

  • 有关指向指针的指针
  • 关于指向指针的指针
  • 关于指向数组的指针
  • 指针指向函数的问题:
  • 指向数据成员的指针?
  • 指向函数的指针的用法!?
  • 一个指针指向两个对象?
  • 指向函数的指针,为什么??
  • 指向数组的指针数组……
  • 指向浮点数指针的问题?

关键词

  • 指针
  • 指向
  • 晕了
  • pt
  • void print

得分解答快速导航

  • 帖主:ScorpioZZR
  • LoopyPuzzle
  • crcr
  • leialen
  • leialen
  • pengzhenwanli

相关链接

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

广告也精彩

反馈

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