急求:主函数中的二维数组如何才能在其他函数中被调用(C语言)

1.二维数组能不能做为参数传给函数?具体如何?(写几行C说明下吧)
2.若用指针,该怎么定义这个函数?在函数中该如何使用这个指针来调用上述二维数组的值?

我用的是TC2.0编译,希望大家能写几行来更加清楚地说明问题。
谢谢各位!

正如楼下所言
int
**p
,定义的p是一个指向int*型的指针
int
(*p)[10]是一个指向数组的指针
数组长度为10
假如定义成
deal(int
**p),传参数时要加强制类型转换:
deal((int**)a);
并且使用p时不能用下标,p[2][3]是错误的,因为不知道p指向的int*型的长度,无法编译成*(p+2*10+3)
必须自己写成*(p+2*10+3)来调用
假如定义成
deal(int
(*p)[10])就不一样了,编译器就能知道p是一个指向长度为10的数组的指针
那么p[2][3]就能编译成*(p+2*10+3)了
总之,c语言是很灵活的,不同的定义方式配上不同的用法,都是能得到正确的结果的
不知道这么说楼主明白了没?
同样的还有多维数组对多维指针的问题,楼主可以自己类推一下
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-05-25
二维和一维一样的啊,管他几维,就多几个循环,就可以使用了。调用传递的,如果是数组名,那就用指针,传递元素就按照一般来做就可以了。你方便理解,同样拿一个二维数组来接受不就好了。其实这样做也是指针做法
第2个回答  2009-05-25
用指针来对二维数组进行遍历:
int main()
{
int m[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int *p=&m[0][0]; //最后一个元素的话,int *p=&m[2][3],不是&m[3][4]
int len=sizeof(m)/sizeof(m[0][0]);
for (int i=0;i<len;i++)
cout<<*(p+i)<<endl;//从最后一个元素逆行的话,*(p-i),p=&m[2][3]
return 0;
}
知道某个元素的地址p以后,和该元素相差i个的元素可以通过*(p+i)或者*(p-i)来访问.如果要以指针最为参数的话,最好把数组的长度相关的数据也作为参数传递,用来确保不会越界
第3个回答  2009-05-25
问题1:
#include <stdio.h>
void printMatrix(int matrix[][3], int rows) {
int i, j;
for (i = 0; i < rows; i++) {
for (j = 0; j < 3; j++) {
printf("%d\t", matrix[i][j]);
}
printf("\n");
}
}

int main() {
int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
printMatrix(matrix, 3);
}

问题2:
printMatrix函数不能定义为printMatrix(int* matrix, int rows, int cols),然后通过*(matrix + i * cols + j),访问matrix[i][j]这个元素(我已经试过了)。应该可以通过指针数组实现,但已不是严格意义上的二维数组了。本回答被提问者采纳
第4个回答  2020-04-09
用指针来对二维数组进行遍历:
int
main()
{
int
m[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int
*p=&m[0][0];
//最后一个元素的话,int
*p=&m[2][3],不是&m[3][4]
int
len=sizeof(m)/sizeof(m[0][0]);
for
(int
i=0;i<len;i++)
cout<<*(p+i)<<endl;//从最后一个元素逆行的话,*(p-i),p=&m[2][3]
return
0;
}
知道某个元素的地址p以后,和该元素相差i个的元素可以通过*(p+i)或者*(p-i)来访问.如果要以指针最为参数的话,最好把数组的长度相关的数据也作为参数传递,用来确保不会越界

主函数中给二维数组赋值,怎么在实参中调用这些值
如图

如何通过函数调用二维数组
C语言编程的过程中,不可避免的会碰到二维或二维以上的数组作为函数的形参的情况,在以前的编程过程中,习惯了动态数组的应用,很是使用直接定义高维数组。最近在编程的过程中就碰到了这个问题:有如下的测试程序:voidtest(double **x,int Row,int Col);voidtest(double **x){ for(int i=0;...

c语言中在不知道二维数组行列数的情况下怎么在函数里调用这个二维数组...
列数 = sizeof(array[0])\/sizeof(array[0][0]);你也可以在函数形参里加入行列值,然后主函数调用子函数的时候,把行列数做为参数传过去。

C语言 二维数组除了用指针传递给自定义函数 还能用其他方法吗
C语言中 指针做函数参数传递二维数组有两种基本方法:1、传递“数组指针”include <stdio.h>void output( int (*pa)[3], int n )\/\/这个函数只能输出n行3列的二维数组{ int i,j; for( i=0;i<n;i++ ){ for( j=0;j<3;j++ ) printf("%d ", pa[i][j] ); prin...

C语言中如何将二维数组作为函数的参数传递
在C语言中可以用二维数组作为实参或者形参。1、函数中用二维数组作为形参,函数声明中可以指定所有维数的大小,也可以省略第1维的维数如:void f(int array[3][10]); \/\/正确 void f(int array[][10]); \/\/正确上面的两种二维数组形参表示都是正确的。2、函数中用二维数组作为形参,不能把第...

C语言函数调用二维数组,指针问题
必须自己写成*(p+2*10+3)来调用 假如定义成 deal(int (*p)[10])就不一样了,编译器就能知道p是一个指向长度为10的数组的指针 那么p[2][3]就能编译成*(p+2*10+3)了 总之,C语言是很灵活的,不同的定义方式配上不同的用法,都是能得到正确的结果的 不知道这么说楼主明白了没?同样的...

c语言怎么把二维数组传入函数
传数据的首地址,也就是数组名代表的指针值。

c语言中怎么用二维数组作为函数参数
二维数组作为函数参数,实参可以直接使用二维数组名,在被调用函数中对形参数组定义可以指定所有维数的大小,也可以省略第一维的大小说明,如:它们是合法且等价,也可以使用如下形式:但不能省略第二维的大小,如下面的定义是不合法的,编译时会出错:因为从实参传递来的是数组的起始地址,如果在形参中不...

关于C语言的二维数组作为函数参数的问题?
int (*arr)[m];所以,传递二维数组作为参数,实际上就是传递了一个指针。将形参的类型定义成int*,再在函数内部转换回指向数组的指针就行了,比如:void f(int *p,int row,int column){ int (*arr)[column]=(int (*)[column])p;\/\/使用二维数组arr } 这样传递参数:int n=5,m=6;int ...

C语言问题,请问二维数组的函数参数是怎么传递的?
void shuchu(int **array_num);在函数中调用时,直接传递数组名就可以了,数组名可以视为数组的“头指针”,可以用这个指针进行一系列的相关操作,如图,可以按如下方式调用 shuchu(a);另外,一个建议:不要在传参时忽略数组的长度,最好显式的以参数的形式传递给函数 或者,在数组中做标志,在...

相似回答