c语言函数引入2维数组 c语言怎么调用二维数组

C语言中 指针做函数参数传递二维数组#include stdio.h
void fun(int (*p1)[3],int (*p2)[3]);
int main()
{
int p1[3][3]={{7,8,9},{4,5,6},{1,2,3}} ;
int p2[3][3] = {0};
int i = 0, j = 0;
fun(p1,p2);
for(i = 0;i3;i++){
for(j = 0;j3;j++){
printf("%d ",*(*(p2+i)+j));
}
printf("\n");
}
return 0;
}
void fun(int (*p1)[3],int (*p2)[3])
{
int i = 0,j = 0;
for(i = 0;i3;i++){
for(j = 0;j3;j++){
*(p2[j]+i) = *(p1[i]+j);
}
}
}
扩展资料:
函数指针的声明方法为:
返回值类型 ( * 指针变量名) ([形参列表]);
其中,“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能?。?括号改变了运算符的优先级 。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表 。例如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
或者使用下面的方法将函数地址赋给函数指针:
f = func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后 , 指针f就指向函数func(x)的代码的首地址 。
参考资料:
百度百科-函数指针
VC++如何在函数中引用一个二维数组形参和实参只要维数对应就可以c语言函数引入2维数组了
例如
函数中proc(int a[][10])可以省略第一维c语言函数引入2维数组的大小,因为c语言编译系统不检查第一维的大小 , 只要第二维大小相同,形参数组第一维可以与实参不同 。
主函数中先定义了b[][10]
引用时:proc(b)即可
即把2维数组b得首地址即b[0][0]的地址传给形参a , 因为数组名本身既是指针常量,所以在函数中对数组a中元素的操作会改变数组b中元素得值 。
C语言函数调用二维数组 , 指针问题正如
楼下
所言
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语言是很灵活的,不同的定义
方式
配上不同的
用法
,都是能得到正确的结果的
不知道这么说楼主明白了没?
同样的还有
多维数组
对多维指针的问题,楼主可以自己类推一下
c语言中怎么用二维数组作为函数参数C语言中
指针做函数参数传递二维数组有两种基本方法:1、传递“数组指针”pre
t="code"
l="cpp"#include
stdio.h
void
output(
int
(*pa)[3],
int
n
)//这个函数只能输出n行3列的二维数组
{
int
i,j;
for(
i=0;in;i++
){
for(
j=0;j3;j++
)
printf("%d
",
pa[i][j]
);
printf("\n");
}
}
void
main()
{
int
a[2][3]={
{1,2,3},
{4,5,6}
};
output(a,2);
}2、传递“指针数组”
先将二维数组的行指针存储到一个指针数组中,再将指针数组传递到子函数中去 。pre

推荐阅读