我想设计一个这样的函数
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数组
}
我知道这样是错的 那我想达到那样的目的 我该怎么写?
我想设计一个这样的函数
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数组
}
我知道这样是错的 那我想达到那样的目的 我该怎么写?
{
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数组
}
#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给出了一个新的指针,用*提出它所指的值。
int add(int **p,int **q,int m , int n)
这样可以不? 不要返回,把要返回的值放在q里边,以参数方式传递。