免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1213 | 回复: 6
打印 上一主题 下一主题

[函数] 一个关于函数传递指针问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-12-03 08:35 |只看该作者 |倒序浏览
#include <stdio.h>;
#include <stdlib.h>;
//问题就在这里,如果我初始化 int **不能编译,如果int *错误更多,请高手请教,还有如何从函数中返回指针的指针啊?
void change(int **arr_1,int **arr_2int col,int row)
{
    int col_,row_;
    for (row_=0;row_<col;row_++)
    {
       for (col_=0;col_<row;col_++)
       {
          *(*(arr_2+row_)+col_)=*(*(arr_1+col_)+row_);
       }
   
     }
}
main()
{
   const int col=5,row=6;
   int m,n;
   int a[6][5],b[5][6];
   printf("please input the array6*5)\n";
   for (m=0;m<row;m++)
   {
      for (n=0;n<col;n++)
      {
        printf("please input the numebr row%d,col%d:",m+1,n+1);
        scanf("%d",&a[m][n]);
      }
   }
   printf("\n\nThe array you have enterd:\n";
   for (m=0;m<row;m++)
   {
      for (n=0;n<col;n++)
      {
        printf("%6d",a[m][n]);
      }
      printf("\n";
   }
   change (a,b,col,row);
   system("pause";
   printf("the array have been changed into:\n";
   for (m=0;m<col;m++)
   {
      for (n=0;n<row;n++)
      {
        printf("%6d",b[m][n]);
      }
      printf("\n";
   }
   system("pause";
}

论坛徽章:
0
2 [报告]
发表于 2003-12-03 08:54 |只看该作者

一个关于函数传递指针问题

我编译了一下,正常通过,运行也能出结果,但有总线错误

论坛徽章:
0
3 [报告]
发表于 2003-12-03 09:04 |只看该作者

一个关于函数传递指针问题

可以用函数返回值,但只能返回一个

论坛徽章:
0
4 [报告]
发表于 2003-12-03 09:05 |只看该作者

一个关于函数传递指针问题

在这种情况下,数组与指针不等价。因为对change函数而言,编译器没有足够的信息知道如何移动指针,针对你这个程序而言,把change的声明改为
void change(int arr_1[][5],int arr_2[][6],int col,int row)
即可

论坛徽章:
0
5 [报告]
发表于 2003-12-03 09:13 |只看该作者

一个关于函数传递指针问题

了解,顶!

论坛徽章:
0
6 [报告]
发表于 2003-12-03 09:48 |只看该作者

一个关于函数传递指针问题

给个示例程序如下:
#include <stdio.h>;
#include <stdlib.h>;

void change(int (*arr_1)[5], int (*arr_2)[6], int col,int row)
{
    int col_, row_;
    for (row_=0; row_<col; row_++)
    {
        for (col_=0; col_<row; col_++)
        {
            *(arr_2[row_]+col_)   = *(arr_1[col_]+row_);
        }
    }
}

int main()
{
    const int col=5, row=6;
    int m,n;

    int b[5][6] = {
                  {-1, -1, -1, -1, -1, -1},
                  {-1, -1, -1, -1, -1, -1},
                  {-1, -1, -1, -1, -1, -1},
                  {-1, -1, -1, -1, -1, -1},
                  {-1, -1, -1, -1, -1, -1},
                  };
    int a[6][5] = {
                  {1, 2, 3, 4, 5},
                  {11, 12, 13, 14, 15},
                  {21, 22, 23, 24, 25},
                  {31, 32, 33, 34, 35},
                  {41, 42, 43, 44, 45},
                  {51, 52, 53, 54, 55},
                };

    int (*pa)[5]    = a;
    int (*pb)[6]    = b;

    printf("In main:\n a:\n";
    for (m=0; m<6; m++)
    {
        for (n=0; n<5; n++)
        {
            printf("%6d", *(pa[m]+n));
        }
        printf("\n";
    }
    printf("In main:\n b:\n";
    for (m=0; m<5; m++)
    {
        for (n=0; n<6; n++)
        {
            printf("%6d", b[m][n]);
        }
        printf("\n";
    }

    change (pa, pb, col, row);

    printf("After change:\n a:\n";
    for (m=0; m<row; m++)
    {
        for (n=0; n<col; n++)
        {
            printf("%6d", a[m][n]);
        }
        printf("\n";
    }
    printf("After change:\n b:\n";
    for (m=0; m<5; m++)
    {
        for (n=0; n<6; n++)
        {
            printf("%6d", b[m][n]);
        }
        printf("\n";
    }

    return 0;
}

论坛徽章:
0
7 [报告]
发表于 2003-12-03 20:16 |只看该作者

一个关于函数传递指针问题

如楼主这样改我也试过,我十分感动你能这么认真阅读我的程序,thanks..
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP