C语言中 指针做函数参数传递二维数组

编写一个函数(参数用指针)将一个3行3列的二维数组a转置后保存到一个二维数组b,即将任意一个元素b[row][col]赋值为a[col][row]。转置的举例:123转置... 编写一个函数(参数用指针)将一个3行3列的二维数组a转置后保存到一个二维数组b, 即将任意一个元素b[row][col]赋值为a[col][row]。
转置的举例:
1 2 3 转置后变成: 1 4 7
4 5 6 2 5 8
7 8 9 3 6 9
展开
 我来答
iiiiiiiipl
2019-05-17 · TA获得超过9921个赞
知道答主
回答量:68
采纳率:66%
帮助的人:3.6万
展开全部

#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;i < 3;i++){

for(j = 0;j < 3;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;i < 3;i++){

for(j = 0;j < 3;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)的代码的首地址。

参考资料:

百度百科-函数指针

kaixingui2012
推荐于2017-10-06 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6137万
展开全部

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] );
printf("\n");
}
}
void main()
{
int a[2][3]={
{1,2,3},
{4,5,6}
};
output(a,2);
}

2、传递“指针数组”  先将二维数组的行指针存储到一个指针数组中,再将指针数组传递到子函数中去。

#include <stdio.h>
void output( int *pa[], int row,int col ) //这个函数更通用,但调用前,要做好准备工作。
{
int i,j;
for( i=0;i<row;i++ ){
for( j=0;j<col;j++ )
printf("%d ", pa[i][j] );
printf("\n");
}
}
void main()
{
int a[2][3]={
{1,2,3},
{4,5,6}
};
int i;
int *pa[2];
for( i=0;i<2;i++ )
pa[i]=a[i];
output(pa, 2, 3);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
推荐于2017-10-10 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6292万
展开全部
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
void myprint(int (*p)[3]){
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;printf("%3d",p[i][j++]));
printf("\n");
}
}
void mytranspose(int (*p)[3],int (*q)[3]){
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;q[j][i]=p[i][j++]);
}
int main(void){
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},b[3][3];
printf("Before the transpose:\n");
myprint(a);
printf("After the transpose:\n");
mytranspose(a,b);
myprint(b);
return 0;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
古老的情歌
2018-11-01 · TA获得超过2132个赞
知道小有建树答主
回答量:1064
采纳率:0%
帮助的人:191万
展开全部
简直将二维指针数组首地址传出去。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
淦扰龙荣0hXf2a
2014-11-26 · TA获得超过113个赞
知道小有建树答主
回答量:200
采纳率:100%
帮助的人:125万
展开全部
二维数组指针 (*p)[3]
追问
实参就是a?~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式