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

指针之诡谲:“指向一维数组的指针变量”和“指针数组”(1)

楼主tjjmmtds(看我72变)2003-08-01 00:33:46 在 C/C++ / C语言 提问

1.如果我想借由指针p来把这个数组的数以矩阵的方式全打印出来,应该怎么写呢?p=arr是把arr的首地址传给它吧?那么,p+1又代表什么意思呢?  
  2.如果例2中,我改用指针数组来实现输出这个矩阵,是否可以?如果可以,程序要怎么写呢?  
  3.对于“指向一维数组的指针变量”和“指针数组”大家有什么使用心得吗?有没一些经验说,在什么情况下用“指向一维数组的指针变量”比较合适,在什么情况用“指针数组”比较合适呢?  
   
  每个问题10分!谢谢~  
   
  -----------  
  1.  
  void   main()  
  {  
  int   i;  
  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}};  
  int   (*p)[5];  
  puts("Matrix:");  
  p=arr;  
  /*printf("");*/  
   
  }  
   
  --------  
  2.  
  void   main()  
  {  
  int   i;  
  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}};  
  int   *p[5];  
  puts("Matrix:");  
   
   
  } 问题点数:30、回复次数:15Top

1 楼pengzhenwanli(紫气日盈)回复于 2003-08-01 00:49:31 得分 5

.如果我想借由指针p来把这个数组的数以矩阵的方式全打印出来,应该怎么写呢?p=arr是把arr的首地址传给它吧?那么,p+1又代表什么意思呢?  
  以P打印出来的写法最简单的  
  void   show(   int   (*p)[5]   )  
  {int   i,j;  
  for(   i   =   0;   i<   5;   i++   )  
  {for(j   =   0;   j<   5;j++   )  
  cout   <<   p[i][j]   <<   "   ";  
  cout   <<   endl;  
  }  
  }  
  p=arr是把arr的首地址传给它,  
  显然p+1代表arr[1]或者是arr+1  
  Top

2 楼pengzhenwanli(紫气日盈)回复于 2003-08-01 00:58:35 得分 5

2.如果例2中,我改用指针数组来实现输出这个矩阵,是否可以?如果可以,程序要怎么写呢?  
  写法是一样的。  
  void   move(int   *b)  
  {  
  int   i,j,t;  
  for   (i=0;i<=N-1;i++)  
  for(j=i+1;j<=N-1;j++)  
  {t=*(b+N*i+j);*(b+N*i+j)=*(b+N*j+i);*(b+N*j+i)=t;}  
  }  
  因为你的指针数组仍然还是指针,变不成数组的指针。  
  int   *p[5];  
  相当于  
  int   *p1;  
  int   *p2;  
  int   *p3;  
  int   *p4;  
  int   *p5;  
  只是声明了5个指针。遍不成数组的指针。Top

3 楼pengzhenwanli(紫气日盈)回复于 2003-08-01 00:59:42 得分 5

3.对于“指向一维数组的指针变量”和“指针数组”大家有什么使用心得吗?有没一些经验说,在什么情况下用“指向一维数组的指针变量”比较合适,在什么情况用“指针数组”比较合适呢?  
  这个比较难说。我看你是对这两个概念不清楚,还是在看看书再问吧/Top

4 楼youngmean(小明)回复于 2003-08-01 01:07:05 得分 1

p+1是第二个数组元素的地址.Top

5 楼bahanzo1(绯雨流烟)回复于 2003-08-01 09:36:03 得分 1

p+1   是第arr[1],  
  能用数组直接打印为什么还要用指针数组呢?Top

6 楼MyNameEPC(MyName)回复于 2003-08-01 11:51:28 得分 1

输出一个三维数组的全部内容:  
  int   array[2][2][2]   =   {1,2,3,4,5,6,7,8};  
  int   *p   =   &array[0][0][0];  
  for(int   i=0;   i<8;   ++i,++p)  
  cout<<*p;  
  输出内容:  
  12345678  
  我想你知道该怎么做了。Top

7 楼tjjmmtds(看我72变)回复于 2003-08-01 12:11:25 得分 0

pengzhenwanli(紫气日盈):  
   
  关于你回答的一问,我是说,为什么p这里其实也不过是个指针变元,为什么可以写成你那种二维数组的方式??  
  关于你回答的二问,老大,偶很笨啦~能不能不厌其烦的写出来一下呀?  
  关于你回答的三问,冤枉呐~我看的很仔细了呜呜,书(《C程序设计》)上就是没有说它们的具体用法,各自有一个例子而已。其中用(*p)[]那种的例子我粘贴出来了呀,用*p[]的都是用来放字符串——我就是想知道,是否可以改用指针数组来实现“指向一维数组的指针”所实现的功能??  
  而例子看不出什么区别,我就是看不懂才上csdn来问的嘛,不然谁那么无聊拨号上网啊??  
  拨号太痛苦了~~  
  我觉得我对这两个概念很清楚,我知道你说的*p[2]和(*p)[2]的区别,问题是不太懂得应用,我想看几个例子,可以用*p[2]实现又可以换成(*p)[2]实现的,能不能简单的为我示范一下?  
  另外,我虽然也看的懂那个c++里的cin   /cout,不过,老大能否迁就一下偶这个C的初学者哩?Top

8 楼yiminggw(某某鸟人)回复于 2003-08-01 12:15:19 得分 1

int   (*p)[4]-->p是一个指针变量,它指向包含4个元素的一维数组,即相当于指向一行的首地址  
  int   *p[4]     -->表示p是一个指针数组,包含4个指针变量  
  Top

9 楼starryC(CSDN)回复于 2003-08-01 12:38:31 得分 1

楼上的有说和没说一个样!  
  楼主都说知道这个概念了!Top

10 楼starryC(CSDN)回复于 2003-08-01 12:39:29 得分 1

拜托要分也不要这样子嘛,像我学着点,有事没事来up一下哈~~Top

11 楼pengzhenwanli(紫气日盈)回复于 2003-08-01 13:04:28 得分 5

如果你非要用指针数组这样好了  
  void   show(   int   *p   )  
  {int   i;  
  for(   i   =   0;i   <   5;i++   )  
  printf(   "%d",p[i]   );  
  printf("\n");  
  }  
  void   main()  
  {  
  int   i;  
  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}};  
  int   *p[5];  
  p[0]   =   *arr;  
  p[1]   =   *(arr+1);  
  p[2]   =   *(arr+2   );  
  p[3]   =   *(arr+3);  
  p[4]   =   *(arr+4   );  
  puts("Matrix:");  
  for(   i   =   0;   i   <   5;   i++   )  
  show(p[i]   );    
  }  
  你自己看有没有必要?  
  Top

12 楼grasshopperliu(老前辈——曾经沧海)回复于 2003-08-01 13:47:08 得分 1

int   (*p)[4];  
  表示的是它可以确定一个四个元素的的间隔  
  如:  
  int   a[4];  
   
  p=a;//p[i]就相当于a[i]  
  int   b[3][4];  
  p=b;//也是相当于p是指向b[0][0]的,p[i]还是b[0][i]  
  /////////////////////////////////////////////////  
  而int   *p;  
  则不同,p=a;//p[i]就相当于a[i],但它可以到p[5],p[6]  
  p=b;//相当于p是指向b[0]的,p[i]就是b[i]了  
   
   
  Top

13 楼maxcai(cailin)回复于 2003-08-01 14:40:09 得分 1

MyNameEPC(MyName)说得对,学习!Top

14 楼starryC(CSDN)回复于 2003-08-02 14:38:14 得分 1

怎么不向我学习??Top

15 楼cityvagrant(城市过客)回复于 2003-08-02 14:40:13 得分 1

TO:starryC(倒立行走的人)    
  拜托  
   
  要分也不要这样子嘛,像我学着点,有事没事来up一下哈~~  
   
  是不是这样UPTop

相关问题

  • 如何定义和使用二维数组变量?
  • 请教全局二维数组变量的内存分配!
  • 多维数组??
  • 一维数组?
  • 二维数组
  • oracle 二维数组
  • 数组变量
  • delphi中,如何在ASM代码中引用Pascal代码中变量和二维数组的值?
  • 多维数组的概念?
  • 二维数组问题

关键词

  • 指针
  • 矩阵
  • 打印
  • 数组
  • 变量
  • 指向
  • 维数组
  • arr
  • 地址

得分解答快速导航

  • 帖主:tjjmmtds
  • pengzhenwanli
  • pengzhenwanli
  • pengzhenwanli
  • youngmean
  • bahanzo1
  • MyNameEPC
  • yiminggw
  • starryC
  • starryC
  • pengzhenwanli
  • grasshopperliu
  • maxcai
  • starryC
  • cityvagrant

相关链接

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

广告也精彩

反馈

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