永发信息网

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

答案:3  悬赏:60  手机版
解决时间 2021-07-21 06:37

我想设计一个这样的函数

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数组

}

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

最佳答案
因为你的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数组

}


全部回答

#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里边,以参数方式传递。

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推销一件物品现在要蔬菜了
成人高考和普通高考有什么不一样?
应城市孝感原始烧烤我想知道这个在什么地方
如果你喜欢的人心里装着别人该怎麽办?
韩剧 太阳的女人 最后智英给道英弹着吉他唱的
不看外观如何能辨识出一台电脑使用了多久?
如果升数别人的qq号对方会知道吗
如何才能忘记??
好莱坞里面的恐怖变异电影有哪些好看的?
适合联想E520的手机QQ
谁有 上传图片的代码
鄢陵县许昌巴黎婚纱(乾明寺路)哪位知道具体地
charisme (avec wallen)-free能放到空间的URL
为什么说打开QQSG说网络连接已断开,09?
诚信贷靠谱吗,现在的理财产品什么比较靠谱
推荐资讯
伤感英文歌。
香坊区哈尔滨新英杰公考在哪里啊,我有事要去
5S管理是什么概念?
DNF为什么老出SX啊
最近汤姆克鲁斯在干嘛,,碟中谍四快出了没有
V3在超市卖多少钱,介绍一下
江华瑶族自治县永州世家布艺哪位知道具体地址
胡腾的名字怎么在诗句里.?
舞阳县漯河北京路立刻松推拿室地址有谁知道?
我Q飞车 还是开不了图标 我都85了 游戏人生勋
谁可以帮我炫舞人气弄到1千,重谢
自学 用英语怎么说
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?