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

一道令我百思不得其解的程序

楼主waste5(小强)2006-03-09 14:13:22 在 C/C++ / C语言 提问

#include<iostream>  
   
  using   namespace   std;  
   
  void   main()  
   
  {  
   
  char   (*p)[6];  
   
  char   a[3][6]={"hello","iam","David"};  
   
  for(int   i=0;i<3;i++)  
   
  {  
   
  p=a;  
   
  cout<<p[i]<<"   ";  
   
  cout<<endl;  
   
  }  
   
  }  
   
  为什么要定义:char   (*p)[6],而不是定义:char   (*p)[3]  
   
  希望大家赐教,小弟我谢了!!!    
   
   
  问题点数:40、回复次数:35Top

1 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2006-03-09 14:18:09 得分 0

为什么要定义:char   (*p)[6],而不是定义:char   (*p)[3]  
  --------------------------  
  原来的数组是char   a[3][6].用指针来表示相当于降一维,指针的跨度原来是sizeof(a)/sizeof(char)   =   3*6.降低一维以后相当于sizeof(*p)   =   6,所以是char(*p)[6]Top

2 楼goodluckyxl(被人遗忘的狗)回复于 2006-03-09 14:19:54 得分 0

(*p)[6]是指向第二维6个字节的指针  
  这个p的类型char(*)[6]   和   char[][6]匹配  
  在c中是告警   可以强制转化解决    
  在c++中估计会报错Top

3 楼jinjiajie(leorio)回复于 2006-03-09 14:21:34 得分 0

.......这个有什么不好理解的?我到是认为要表述清楚这个需要很好的文字功底Top

4 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2006-03-09 14:24:37 得分 0

 
  (*p)[6]是指向第二维6个字节的指针  
  这个p的类型char(*)[6]   和   char[][6]匹配  
  在c中是告警   可以强制转化解决  
  在c++中估计会报错  
  -------------------------------------  
  死狗,为何会报错?C++也匹配的好伐  
  Top

5 楼goodluckyxl(被人遗忘的狗)回复于 2006-03-09 14:38:55 得分 0

我说   char   (*p)[3]   =   char[][6];这样啊Top

6 楼carry_on(Never lose my passion)回复于 2006-03-09 14:41:21 得分 0

很简单,  
  char   (*p)[3]是表示P指向只分配三个字符空间的指针,肯定存不下hello   david  
  char   (*p)[3]与a[][3]差不多,不过char   (*p)[3]更灵活  
  char   (*p)[3]中指向每一个数据(单词)在物理地址可能是不连续嘀  
  a[][3]中存放的数据(单词)在物理地址上是连续的  
   
  Top

7 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2006-03-09 14:42:27 得分 0

char[][6]   哇哈哈哈哈哈哈   动感光波~~~~unknown   sizeTop

8 楼carry_on(Never lose my passion)回复于 2006-03-09 14:43:57 得分 0

因为char   (*p)[3]只能存两个字符('\0'还占一个字符)  
  所以肯定要用char   (*p)[6]Top

9 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2006-03-09 14:45:22 得分 0

char   (*p)[3]是表示P指向只分配三个字符空间的指针//???????晕了....  
  同志.....  
  char   array[10000000000][3];  
  char   (*p)[3];  
  p   =   array;可以不?.........那个后面的只是第二维的个数嘛~Top

10 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2006-03-09 14:46:39 得分 0

难道楼上认为char   (*p)[3]和char   arr[3]一样的....晕...Top

11 楼goodluckyxl(被人遗忘的狗)回复于 2006-03-09 14:48:19 得分 0

char   (*p)[3]   =   char[][6];    
   
  是指将   char(*)[6]类型**赋予char(*)[3]类型的**    
  是表示一类数据的赋值过程     晕   -_-!Top

12 楼carry_on(Never lose my passion)回复于 2006-03-09 14:50:01 得分 0

你误会我嘀意思了Top

13 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2006-03-09 14:50:51 得分 0

偶知道.....逗你呢.....哈哈哈哈~~~~谁叫你那天在水源讲偶....NND.  
  实际上.VC 对char   (*p)[3]   =   char[][6];是不通过的....原因不知道是不是C和  
  C++实现多重数组的结构不一样?嵌套?位移?这个偶一直没去研究,喝喝,老狗讲讲~Top

14 楼carry_on(Never lose my passion)回复于 2006-03-09 14:51:09 得分 0

我是说  
  -------------------  
  因为char   (*p)[3]只能存两个字符('\0'还占一个字符)  
  ----------------------  
  P指向的每一个地方只能这样Top

15 楼goodluckyxl(被人遗忘的狗)回复于 2006-03-09 14:52:30 得分 0

不讲Top

16 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2006-03-09 14:54:57 得分 0

bsTop

17 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2006-03-09 14:55:07 得分 0

wsTop

18 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2006-03-09 14:55:13 得分 0

ed狗Top

19 楼jinjiajie(leorio)回复于 2006-03-09 15:00:42 得分 0

好多人在等着听呢Top

20 楼hustacsky(见好不收)回复于 2006-03-09 20:05:06 得分 0

char   (*p)[6];p指的是指向包含了6个元素的数组的指针。关于char   a[3][6]的数组名a,数组a[3]中存放3个有有6个元素的数组,也就是说a[0],a[1],a[2]中都是存放一个数组(有6个元素),a就是a[3]这个数组的指针。a这个指针指向a[0]这个元素,因为a[0]中有6个元素。所以把a赋给p的时候,p需要是char   (*p)[6]而不是char   (*p)[3]。不知道我说清楚了没有。Top

21 楼hustacsky(见好不收)回复于 2006-03-09 20:08:03 得分 0

上面的赋值以后,所以p[0]就是指向"hello",p[1]就是指向"iam",p[2]就是指向"David"。Top

22 楼citywanderer2005(流浪狗)回复于 2006-03-09 20:35:08 得分 0

我怀疑楼主没有搞清楚char   *p[3]和char   (*p)[3]的区别。  
  char   *p[3]是指含有三个指向char类型指针的数组。  
  char   (*p)[3]是指向包含了3个元素的数组的指针。  
  如果把程序换成:  
  #include<iostream>  
   
  using   namespace   std;  
   
  void   main()  
   
  {  
   
  char   *p[3];  
   
  char   a[3][6]={"hello","iam","David"};  
   
  for(int   i=0;i<3;i++)  
   
  {  
   
  p[i]=*(a+i);  
   
  cout<<p[i]<<"   ";  
   
  cout<<endl;  
   
  }  
   
  }  
  Top

23 楼lxfxw(feng)回复于 2006-03-10 08:54:16 得分 0

char   (*p)[6];  
  我们首先要弄懂这个语句的含义。  
  1.首先它定义的是一个指针,而不是一个数组(不管数据存放的是什么内容);  
  2.再次这个指针指向的内容是一个数组,而且这个数组的大小是6;  
   
  知道这后,我们就会明白。  
  由于指针p要指数组char   a[3][6]={"hello","iam","David"};故要定义这样的指针char   (*p)[6];  
   
   
  Top

24 楼september_29(RSGIS)回复于 2006-03-10 09:03:29 得分 0

哈哈,我准备说的,看来这儿明白人还是不少的,楼上说的对Top

25 楼shalear(张真人)回复于 2006-03-10 09:05:33 得分 0

楼上的citywanderer2005(citywanderer)说得对!Top

26 楼carry_on(Never lose my passion)回复于 2006-03-10 10:11:17 得分 0

楼上的citywanderer2005(citywanderer)很详细Top

27 楼lyongx()回复于 2006-03-10 11:06:42 得分 0

p是指针,指向有六个char元素的數組,则p   +   1   <==>   (UINT)   p   +   sizeof(char)   *   6;Top

28 楼Dream_Lu(璞境)回复于 2006-03-10 15:02:31 得分 0

簡單的講,  
  char   (*p)[6]   是一指針,它指向含有6個字符的組.  
  char     a[3][6]   是三個字符數組(a[0],a[1],a[2]).每個數組個長度是6.  
  Top

29 楼goodman_2006(无极)回复于 2006-03-10 16:20:21 得分 0

真为中国的软件行业担心,   这个个基本的问题还有这么多人不明白,还好我上面这位仁兄,  
  终于说对了Top

30 楼goodman_2006(无极)回复于 2006-03-10 16:21:52 得分 0

真为中国的软件行业担心,   这个个基本的问题还有这么多人不明白,还好我上面这位仁兄,  
  终于说对了Top

31 楼bbbbcccc()回复于 2006-03-10 16:47:07 得分 0

http://valenhua.go3.icpcn.com/Top

32 楼Jiancash(孤鸿铩羽)回复于 2006-03-10 20:44:22 得分 0

唿唿,具然是这么回事哦。Top

33 楼zncn2(embedded system)回复于 2006-03-10 23:06:08 得分 0

h   e   l   l   o   \0   i   a   m   \0           D   a   v   i   d   \0  
  □□□□□□   □□□□□□   □□□□□□  
  ↑        ↑        ↑   
  a[0][0]       a[1][0]        a[2][0]  
   
  二维数组的真正实现仍是一唯数组  
  char   (*p)[6]是一种指针,这种指针一旦做运算,它的基本运算单位就为6个char  
   
  如p++将会使p向后一次性移动6个char长度。  
  而p[i]也将默认将i乘以6再访问内存。  
  参考这样一段程序  
   
  #include<iostream>  
  using   namespace   std;  
  void   main(void)  
  {  
   
  char   (*p)[6];  
  char   a[3][6]={"hello","iam","David"};  
  p=a;  
  for(int   i=0;i<3;i++)  
  {  
  cout<<*p<<"   ";  
  cout<<endl;  
  p++;  
  }  
  }Top

34 楼zncn2(embedded system)回复于 2006-03-10 23:07:01 得分 0

我倒,大方块居然又变小方块了,拷下粘到记事本里就正常显示了Top

35 楼wangmuqq88(挥着翅膀的尼姑)回复于 2006-03-12 00:44:30 得分 0

欢迎加群20641933,欢迎大家共同交流.提高!(不怕不会,就怕不学.)Top

相关问题

  • 晕死的一个程序,百思不得其解
  • 新手的3行C程序,百思不得其解
  • 刚才发错了:百思不得其解: 这段程序错那儿了
  • 百思不得其解--为什么这个程序运行错误?
  • 太奇怪了!!我的程序锁不住文件,也锁不住端口,百思不得其解……
  • 百思不得其解,我的asp程序怎么会让浏览器非法关闭!
  • 百思不得其解:为什么不能令这个窗体为最上层窗体?
  • 百思不得其解~~????
  • 百思不得其解
  • 百思不得其解

关键词

  • iam
  • david
  • 基本
  • hello
  • char
  • usingnamespace std
  • void main

得分解答快速导航

  • 帖主:waste5

相关链接

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

广告也精彩

反馈

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