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

回复:
user: user-1
content: 定义实参的时候，用new关键字申请，在函数中形参直接用二维指针就行

user: user-2
content: 传递指向这个二维数组的指针

user: user-3
content: 定义一个二级指针指向二维数组，然后吧元素个数也传递过去，然后按照一维数组进行遍历。我的想法，明天起床去试一下，应该可以

user: user-4
content: 引用 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]那就继续加更多的数据成员～

user: user-5
content: 引用 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是类对象  然后你函数传递该类就行了。虽然麻烦点，但简直万能！（——应该吧？） 最起码你这个类无法包含整个互联网内容。

user: user-4
content: 突然想了一个办法。  创建一个类呗，这个类储存了这个二维数组。假如你不需要修改源二维数组的话，通过赋值，将这个二维数组赋值给类。 具体方法如下： 类包含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是类对象  然后你函数传递该类就行了。虽然麻烦点，但简直万能！（——应该吧？）

user: user-6
content: 可以直接用函数的嵌套塞，现定于一个函数，再在main函数中用

user: user-7
content: C语言，一切皆指针，而指针无非是一个变量，保存的是地址而已。所以把一切都看成个数，然后用的时候强制转化成想要的类型来用就行。

user: user-8
content: 数组本来就无法当参数传递给函数(结构体里的数组例外),只能以指针的形式传递,而且传递的过程中会丢失部分数组信息(大小)

user: user-9
content: 例如要传array[m][n]，传&array[0][0]、m、n，里面用的时候自己求具体位置。 用sizeof(array[0][0])求出对象长度， 然后哪行哪列慢慢算到要取的数的内存地址，再把对象取出来就行了。 核心依据：数组的内存是连续的。

user: user-10
content: 引用 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; }

user: user-11
content: 引用 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] 是三维的

user: user-12
content: 用struct啊，给它包裹住！然后你想传什么？！都可以啊

user: user-10
content: 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); }

user: user-13
content: void xxx(char a[2][3]); ????

user: user-14
content: 引用 25 楼 chengeng_jd 的回复:[quote=引用 24 楼 zhangxiangDavaid 的回复:] 请不要忽略这个warning： warning C4047: “函数”:“int *”与“int [2][6]”的间接级别不同 warning C4024: “array_manu”: 形参和实参 1 的类型不同 确实有warning，请教如何解决比较好。[/quote] 原因在于类型不匹配。 按我说的方法修改即可。

user: user-15
content: 引用 24 楼 zhangxiangDavaid 的回复:请不要忽略这个warning： warning C4047: “函数”:“int *”与“int [2][6]”的间接级别不同 warning C4024: “array_manu”: 形参和实参 1 的类型不同 确实有warning，请教如何解决比较好。

user: user-14
content: 引用 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 的类型不同

user: user-15
content: 引用 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); } 执行结果符合预期。

user: user-16
content: 引用 楼主 wykqhyjs 的回复:比如 int a[2][3]  如何 把 a 作为参数传给函数呢，我们主管问 要注意堆栈问题，总之 结果不要出错， 跪求贴点代码  type func(..., int (*p)[3]) {   ... } int (*p)[3] = (int (*)[3])malloc(size); func(..., p);