永发信息网

关于二维数组做为函数的参数和返回的问题

答案:3  悬赏:60  手机版
解决时间 2021-07-21 06:37
  • 提问者网友:美人性情
  • 2021-07-20 23:54

我想设计一个这样的函数

int **add(int **p,int m,int n)//是 二维数组的名字 2维大小(可能错了....)

{
int x[m][n];

for(int i=0;i<m;i++)

for(int j=0;j<n;j++)

x[m][n]=p[m][n]+m+n;

return x;//返回 x数组

}

我知道这样是错的 那我想达到那样的目的 我该怎么写?

最佳答案
  • 五星知识达人网友:过活
  • 2021-07-21 00:31
因为你的m和n是传入的参数
程序没运行的时候是没有值的
所以你这时候x[m][n];这么写 编译器是不知道你到底要分配多少空间的
象你这种情况 需要动态申请二位空间
int **add(int **p,int m,int n)//是 二维数组的名字 2维大小(可能错了....)

{
int **x=new int*[m];

for(int i=0;i<m;i++)

{

x[i]=new int[n];

for(int j=0;j<n;j++)

x[i][j]=p[m][n]+m+n;

}

return x;//返回 x数组

}


全部回答
  • 1楼网友:老鼠爱大米
  • 2021-07-21 02:51

#include <stdio.h> #include <stdlib.h> int *add(int *p,int m,int n)//是 二维数组的名字 2维大小(可能错了....)

{ int *x; int *temp;

x=(int *)malloc(sizeof(int)*n*m);

for(int i=0;i<m;i++)

for(int j=0;j<n;j++)

*(x+i*n+j)=*(p+i*n+j)+m+n;

return x;//返回 x数组

} void main() { int a[2][1]; int i,j; int *b; a[0][0]=15; a[1][0]=15; i=2;j=1; //b=(int*)a; b=add(*a,i,j); printf("\n%d %d",*(b),*(b+1*1+0)); }

我的办法可能比较笨:(多维数组在C程序当中被当作分段的一维数组存在内存中,多维数组的指针操作在申请内存时要一层一层来所以太繁琐,而且调用时指针和var定义的实际数组之间传参很麻烦,不如将多维数组直接用一维指针去操作,这样会很方便的。)

*(p+i*n+j)指读取从p开始第i*n+j个位置的值。 如果你的p是一个2×3的数组,也就是p[i]代表一个有着三个元素的整数数组。在内存里二维数组是按照从高到低从左到有的顺序连续排列的,以你的数组为例: 1 2 3 4 5 6 那么在内存里这些的排列顺序就是1 2 3 4 5 6,而pia所指的就是1的位置。 所以i*3+j就给出了从数组开头第i*3+j个元素的位置,也就是p[i][j]的位置。 如果*是放在数字变量和常量的中间,它就代表乘号。如果放在一个指针变量的前面就代表提取符,pia+i*3+j给出了一个新的指针,用*提出它所指的值。

  • 2楼网友:低血压的长颈鹿
  • 2021-07-21 01:35

int add(int **p,int **q,int m , int n)

这样可以不? 不要返回,把要返回的值放在q里边,以参数方式传递。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯