通宵没解决,如何 把 二维数组,作为参数 传给 函数,跪求,是否涉及推或者栈的问题,我糊涂了,

wykqhyjs 2016-02-13 03:02:20
加精
比如 int a[2][3]

如何 把 a 作为参数传给函数呢,我们主管问 要注意堆栈问题,总之 结果不要出错,
跪求贴点代码
...全文
3901 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
guYSWJ 2017-05-30
  • 打赏
  • 举报
回复
定义实参的时候,用new关键字申请,在函数中形参直接用二维指针就行
qq_37946423 2017-04-02
  • 打赏
  • 举报
回复
传递指向这个二维数组的指针
快乐的小黑 2017-02-21
  • 打赏
  • 举报
回复
定义一个二级指针指向二维数组,然后吧元素个数也传递过去,然后按照一维数组进行遍历。我的想法,明天起床去试一下,应该可以
qq20004604 2016-02-29
  • 打赏
  • 举报
回复
引用 38楼赵4老师 的回复:
[quote=引用 37 楼 qq20004604 的回复:] 突然想了一个办法。 创建一个类呗,这个类储存了这个二维数组。假如你不需要修改源二维数组的话,通过赋值,将这个二维数组赋值给类。 具体方法如下: 类包含int i; 用于描述有几列数,int j,用于描述有几排。一个指针(例如int*),用于指向储存的二维数组 你先调用一个类方法,用于设置i和j的值。int *mm=new int[i][j]; 然后逐个赋值:
for(int i=0;i<x;i++)  //x为二维数组有几行
for(int j=0;j<y;j++)  //j为二维数组有几列
pp.setXY( m[i][j],i,j);   //setXY为给类对象new出来的二维数组的某一个值赋值,具体是哪个,根据参数2和参数3决定,pp是类对象
然后你函数传递该类就行了。虽然麻烦点,但简直万能!(——应该吧?)
最起码你这个类无法包含整个互联网内容。[/quote]那就继续加更多的数据成员~
赵4老师 2016-02-29
  • 打赏
  • 举报
回复
引用 37 楼 qq20004604 的回复:
突然想了一个办法。 创建一个类呗,这个类储存了这个二维数组。假如你不需要修改源二维数组的话,通过赋值,将这个二维数组赋值给类。 具体方法如下: 类包含int i; 用于描述有几列数,int j,用于描述有几排。一个指针(例如int*),用于指向储存的二维数组 你先调用一个类方法,用于设置i和j的值。int *mm=new int[i][j]; 然后逐个赋值:
for(int i=0;i<x;i++)  //x为二维数组有几行
for(int j=0;j<y;j++)  //j为二维数组有几列
pp.setXY( m[i][j],i,j);   //setXY为给类对象new出来的二维数组的某一个值赋值,具体是哪个,根据参数2和参数3决定,pp是类对象
然后你函数传递该类就行了。虽然麻烦点,但简直万能!(——应该吧?)
最起码你这个类无法包含整个互联网内容。
qq20004604 2016-02-28
  • 打赏
  • 举报
回复
突然想了一个办法。 创建一个类呗,这个类储存了这个二维数组。假如你不需要修改源二维数组的话,通过赋值,将这个二维数组赋值给类。 具体方法如下: 类包含int i; 用于描述有几列数,int j,用于描述有几排。一个指针(例如int*),用于指向储存的二维数组 你先调用一个类方法,用于设置i和j的值。int *mm=new int[i][j]; 然后逐个赋值:
for(int i=0;i<x;i++)  //x为二维数组有几行
for(int j=0;j<y;j++)  //j为二维数组有几列
pp.setXY( m[i][j],i,j);   //setXY为给类对象new出来的二维数组的某一个值赋值,具体是哪个,根据参数2和参数3决定,pp是类对象
然后你函数传递该类就行了。虽然麻烦点,但简直万能!(——应该吧?)
shi789789789 2016-02-27
  • 打赏
  • 举报
回复
可以直接用函数的嵌套塞,现定于一个函数,再在main函数中用
shinerise 2016-02-27
  • 打赏
  • 举报
回复
C语言,一切皆指针,而指针无非是一个变量,保存的是地址而已。所以把一切都看成个数,然后用的时候强制转化成想要的类型来用就行。
醉花阴柳 2016-02-26
  • 打赏
  • 举报
回复
数组本来就无法当参数传递给函数(结构体里的数组例外),只能以指针的形式传递,而且传递的过程中会丢失部分数组信息(大小)
万物一半可抛 2016-02-25
  • 打赏
  • 举报
回复
例如要传array[m][n],传&array[0][0]、m、n,里面用的时候自己求具体位置。 用sizeof(array[0][0])求出对象长度, 然后哪行哪列慢慢算到要取的数的内存地址,再把对象取出来就行了。 核心依据:数组的内存是连续的。
均陵鼠侠 2016-02-25
  • 打赏
  • 举报
回复
引用 31 楼 Xiejunyi12 的回复:
[quote=引用 27 楼 sholber 的回复:] void f (int (* p) [2][3], int x, int y) { (* p) [0] [0] = (* p) [1] [1]; } int main (void) { int a [2] [3]; f (& a, 2, 3); }
你搞个三维数组干嘛的。。。 int (* p) [2][3] 是三维的[/quote] 谁说的。p明明是指向二维数组int [2][3]的指针。
#include <stdio.h>

typedef int arr [2] [3];

void f (arr * p)
{
    int x = sizeof (* p) [0] / sizeof (int);
    int y = sizeof * p / (x * sizeof (int));
    
    printf ("%d, %d\n", x, y);
}

int main (void)
{
    arr a;
    f (& a);
    
    return 0;
}
Xiejunyi12 2016-02-25
  • 打赏
  • 举报
回复
引用 27 楼 sholber 的回复:
void f (int (* p) [2][3], int x, int y) { (* p) [0] [0] = (* p) [1] [1]; } int main (void) { int a [2] [3]; f (& a, 2, 3); }
你搞个三维数组干嘛的。。。 int (* p) [2][3] 是三维的
Heart09 2016-02-24
  • 打赏
  • 举报
回复
用struct啊,给它包裹住!然后你想传什么?!都可以啊
均陵鼠侠 2016-02-24
  • 打赏
  • 举报
回复
void f (int (* p) [2][3], int x, int y) { (* p) [0] [0] = (* p) [1] [1]; } int main (void) { int a [2] [3]; f (& a, 2, 3); }
schlafenhamster 2016-02-24
  • 打赏
  • 举报
回复
void xxx(char a[2][3]); ????
苏叔叔 2016-02-23
  • 打赏
  • 举报
回复
引用 25 楼 chengeng_jd 的回复:
[quote=引用 24 楼 zhangxiangDavaid 的回复:] 请不要忽略这个warning: warning C4047: “函数”:“int *”与“int [2][6]”的间接级别不同 warning C4024: “array_manu”: 形参和实参 1 的类型不同
确实有warning,请教如何解决比较好。[/quote] 原因在于类型不匹配。 按我说的方法修改即可。
HarryJD 2016-02-23
  • 打赏
  • 举报
回复
引用 24 楼 zhangxiangDavaid 的回复:
请不要忽略这个warning: warning C4047: “函数”:“int *”与“int [2][6]”的间接级别不同 warning C4024: “array_manu”: 形参和实参 1 的类型不同
确实有warning,请教如何解决比较好。
苏叔叔 2016-02-23
  • 打赏
  • 举报
回复
引用 23 楼 chengeng_jd 的回复:
[quote=引用 11 楼 zhangxiangDavaid 的回复:] [quote=引用 10 楼 chengeng_jd 的回复:] 传指针数组就是了,然后把2个维度也当参数传。
请具体演示……[/quote] //把传入的一个二维数组的元素都加上1 void array_manu(int *M, int ny, int nx) { for(int y=0; y<ny; y++) for(int x=0; x<nx; x++) *(M+(y*nx)+x)= *(M+(y*nx)+x) +1; } int main(void) { //定义一个二位数组,并初始化 int myArray[2][6]= {{1, 2, 3, 4, 5, 6}, {11, 12, 13, 14, 15, 16}}; for(int y=0; y<2; y++) { for(int x=0; x<6; x++) printf("%d\t", myArray[y][x]); printf("\n"); } printf("\n"); array_manu(myArray, 2, 6); for(int y=0; y<2; y++) { for(int x=0; x<6; x++) printf("%d\t", myArray[y][x]); printf("\n"); } return(0); } 执行结果符合预期。[/quote] 请不要忽略这个warning: warning C4047: “函数”:“int *”与“int [2][6]”的间接级别不同 warning C4024: “array_manu”: 形参和实参 1 的类型不同
HarryJD 2016-02-23
  • 打赏
  • 举报
回复
引用 11 楼 zhangxiangDavaid 的回复:
[quote=引用 10 楼 chengeng_jd 的回复:] 传指针数组就是了,然后把2个维度也当参数传。
请具体演示……[/quote] //把传入的一个二维数组的元素都加上1 void array_manu(int *M, int ny, int nx) { for(int y=0; y<ny; y++) for(int x=0; x<nx; x++) *(M+(y*nx)+x)= *(M+(y*nx)+x) +1; } int main(void) { //定义一个二位数组,并初始化 int myArray[2][6]= {{1, 2, 3, 4, 5, 6}, {11, 12, 13, 14, 15, 16}}; for(int y=0; y<2; y++) { for(int x=0; x<6; x++) printf("%d\t", myArray[y][x]); printf("\n"); } printf("\n"); array_manu(myArray, 2, 6); for(int y=0; y<2; y++) { for(int x=0; x<6; x++) printf("%d\t", myArray[y][x]); printf("\n"); } return(0); } 执行结果符合预期。
nadleeh 2016-02-19
  • 打赏
  • 举报
回复
引用 楼主 wykqhyjs 的回复:
比如 int a[2][3] 如何 把 a 作为参数传给函数呢,我们主管问 要注意堆栈问题,总之 结果不要出错, 跪求贴点代码
type func(..., int (*p)[3]) { ... } int (*p)[3] = (int (*)[3])malloc(size); func(..., p);
加载更多回复(21)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧