请教大神向指针形参传递数组名的正确方法

Ezirio 2016-12-26 09:44:53


在程序中定义了一个函数,原型是void Transpose(int *a,int n)
然后声明了一个数组a[N][N]
调用的语句是Transpose(*a,n);
把‘*’去掉之后会报错,请问这是什么情况?数组名传递过去不就变成指针了吗,为什么还要加‘*’?而且我把“*a”和“a”用十六进制格式打印出来的值是一样的,请问大神,向指针形参传递数组名是要加“*”吗?
...全文
272 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 版主 2016-12-27
  • 打赏
  • 举报
回复
a又不是int *类型的,直接将a传过去当然会报错
http://www.cnblogs.com/CBDoctor/archive/2012/07/29/2614054.html
paschen 2016-12-27
  • 打赏
  • 举报
回复
否则参数类型不匹配呗 a[N][N]作为参数传递会退化成为 int(*)[N] ,并不是你参数的int* *a得到的是 int[]类型,作为参数传递会退化为int*,符合你参数类型
suuare 2016-12-27
  • 打赏
  • 举报
回复
一维数组:

void fn(int *pArr,size_t n)//函数定义时指向数组元素的指针作为函数的形参
{
   .......
}
int a[] = {....};
fn(a);//调用时数组名作为函数实参
二维数组:

void foo(int (*pArr)[5],size_t n)//函数定义时指向数组元素(每个元素是一个长度为5的一维数组的指针作为函数的形参,[5]不能省!
{
   .......
}
int a[3][5] = {....};//可以认为数组a有三个元素,每个元素是一个长度为5的一维数组
foo(a);//调用时二维数组名作为函数实参
三维数组: [code=c] void fm(int (*pArr)[5][6],size_t n)//函数定义时指向数组元素(每个元素是一个长度为[5][6]的二维数组的指针作为函数的形参 { ....... } int a[3][5][6] = {....};//可以认为数组a有三个元素,每个元素是一个长度为[5][6]的二维数组,每个二维数组中又含有一个长度为6的 //一维数组],照此递归 fm(a);//调用时三维数组名作为函数实参 [/code n维数组: ... ....
LinJie98 2016-12-26
  • 打赏
  • 举报
回复
二维数组 对应 ”伪“二维指针,而a是一维指针,所以两个替换时会有编译错误

69,371

社区成员

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

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