鱼C论坛

 找回密码
 立即注册
查看: 3551|回复: 12

能不能看看这个代码有错误,还是我编译器不支持变长数组

[复制链接]
发表于 2011-7-25 19:54:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#define COL 3
#define ROW 5
void copy(int cos,int row,int ar[cos][row],int br[cos][row]);
void prf(int cos,int row,int ar[cos][row]);
int main(void)
{
int num1[COL][ROW]={{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}};
int num2[COL][ROW];
copy(COL,ROW,num1,num2);
printf("num1[3][5]:\n");
prf(COL,ROW,num1);
printf("\nnum2[3][5]:\n");
prf(COL,ROW,num2);
return 0;
}
void copy(int cos,int row,int ar[cos][row],int br[cos][row])
{
int i,k;
for(i=0;i<cos;i++)
{
  for(k=0;i<row;k++)
  {
   br[i][k]=ar[i][k];
  }
}
}
void prf(int cos,int row,int ar[cos][row])
{
int i,k;
for(i=0;i<cos;i++)
{
  for(k=0;i<row;k++)
  {
   printf("%d ",ar[i][k]);
  }
}
}

   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-26 11:04:11 | 显示全部楼层
你把行和列搞错了。你应该这样写int num1[ROW][COL] = {{1,2, 3,4,5},{1,2,3,4,5},{1,2,3,4,5}};这样才是3行5列。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-26 18:12:21 | 显示全部楼层

没有错啊!就是int num1[COL][ROW] = {{1,2, 3,4,5},{1,2,3,4,5},{1,2,3,4,5}};
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-26 23:36:56 | 显示全部楼层
  1. #include <stdio.h>
  2. #define COL 3
  3. #define ROW 5
  4. void copy(int cos,int row,int ar[][5],int br[][5]);
  5. void prf(int cos,int row,int ar[][5]);
  6. int main(void)
  7. {
  8. int num1[COL][ROW]={{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}};
  9. int num2[COL][ROW]={0};
  10. copy(COL,ROW,num1,num2);
  11. printf("num1[3][5]:\n");
  12. prf(COL,ROW,num1);
  13. printf("\nnum2[3][5]:\n");
  14. prf(COL,ROW,num2);
  15. return 0;
  16. }
  17. void copy(int cos,int row,int ar[][5],int br[][5])
  18. {
  19.     int i,k;
  20.     for(i=0;i<cos;i++)
  21.     {
  22.         for(k=0;k<row;k++)
  23.         {
  24.             br[i][k]=ar[i][k];
  25.         }
  26.     }
  27. }


  28. void prf(int cos,int row,int ar[][5])
  29. {
  30.     int i,k;
  31.     for(i=0;i<cos;i++)
  32.     {
  33.         for(k=0;k<row;k++)
  34.         {
  35.             printf("%d ",ar[i][k]);
  36.         }
  37.         printf("\n");
  38.     }
  39. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-26 23:56:17 | 显示全部楼层

void copy(int cos,int row,int ar[][5],int br[][5]);
如果你这样不是失去了其维数大小由变量来指定了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-27 08:11:25 | 显示全部楼层
4楼作得没错,数组作为函数的参数本来就会退化为指针,所以参数中数组int ar[][5]会退化为int (*ar)[5],所以第一维的数据个数可以省略。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-27 10:16:23 | 显示全部楼层
二维数组 就是相当于一维数组 只不过元素是数组
你要知道一维数组的分界线  就是上界 要指定列数 不然编译器怎么知道一维数组里元素的分界 行数不用指定

你的代码 就第二层循环条件错了  还有个数组行列不能用变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-27 12:02:27 | 显示全部楼层
吖查 发表于 2011-7-26 18:12
没有错啊!就是int num1[COL][ROW] = {{1,2, 3,4,5},{1,2,3,4,5},{1,2,3,4,5}};

抱歉,是我看错了。我习惯int b[row][col]。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-27 18:38:34 | 显示全部楼层
仰望天上的光 发表于 2011-7-27 08:11
4楼作得没错,数组作为函数的参数本来就会退化为指针,所以参数中数组int ar[][5]会退化为int (*ar)[5],所以 ...

我想试试C99的变长数组是怎样的,
声明不是这样,int sum (int ,int ,int ar
  • [8]);
    函数定义这样,int sum(int rows,int cols,int ar[rows][cols])
    {
    }
  • 想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
     楼主| 发表于 2011-7-27 18:39:40 | 显示全部楼层
    紫色枫叶 发表于 2011-7-27 12:02
    抱歉,是我看错了。我习惯int b[row][col]。

    呵呵 因为是我英语水平低,弄错了单词意思
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
     楼主| 发表于 2011-7-27 18:42:19 | 显示全部楼层
    ccqiji 发表于 2011-7-27 10:16
    二维数组 就是相当于一维数组 只不过元素是数组
    你要知道一维数组的分界线  就是上界 要指定列数 不然编译 ...

    啊?第二层循环就错了?我发现不了啊
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    发表于 2011-8-20 20:53:26 | 显示全部楼层
    你把那个for(k=0;i<row;k++)
    自己看看明明是K怎么变成i了,好好看看!!
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
     楼主| 发表于 2011-9-18 12:23:47 | 显示全部楼层
    系啊,自己太粗心啦,谢谢啦!!!!!
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

    GMT+8, 2024-4-20 08:55

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表