以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  荤菜求助:指向二维数组的指针问题3  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=47234)


--  作者:荤菜
--  发布时间:5/20/2007 9:35:00 PM

--  荤菜求助:指向二维数组的指针问题3
/*输出score中12个数*/
main()
{
  void search();
  static int score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
  search(score,3);
  getch();
  }
  void search(x,n)
  int *x;                   /*我不明白为什么这一行改成(*x)[4]结果就正确了.我不想用这个,只想用score的首地址x*/
  int n;
  {int i,j;
  for(i=0;i<n;i++)
  for(j=0;j<4;j++)
  printf("%4d",*(*(x+i)+j));/*错误:无效间接运算在 search 函数中*/
  getch();
   }
--  作者:一分之千
--  发布时间:5/21/2007 11:04:00 AM

--  
这个就涉及到二维数组了,*x只是一维,而你要输出的是二维数组
--  作者:荤菜
--  发布时间:5/21/2007 10:14:00 PM

--  
谢谢
--  作者:lixiaoting
--  发布时间:7/29/2007 2:12:00 PM

--  
二维数组的定义和调用。
二维数组指针定义有2种:1.行指针  例如int *x;x=a[0];2.元素指针:例如:int (*p)[4];p=a
在这个题目里面你的调用方式为*(*(p+i)+j)这种是元素指针的调用,你用行指针就不对了。
#include<stdio.h>
main()
{
  void search(int s[3][4],int n);
  static int score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
  search(score,3);
}
void search(int s[3][4],int n)
{
    int i,j,(*p)[4]; p=s;
    for(i=0;i<n;i++)
    for(j=0;j<4;j++)
    printf("%4d",*(*(p+i)+j));
}
或者改为行指针:
#include<stdio.h>
main()
{
  void search(int s[3][4],int n);
  static int score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
  search(score,12);
}
void search(int s[3][4],int n)
{
    int i,j,*p; p=s[0];
    for(i=0;i<12;i++)
    printf("%4d",p[i]);
}
在计算机中,二维数组的存放方式和一维数组是一样的。
--  作者:NingBo
--  发布时间:8/16/2007 3:41:00 PM

--  
lixiaoting 回答的是正解
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms