Chinaunix首页 | 论坛 | 博客
  • 博客访问: 208267
  • 博文数量: 80
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 824
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-12 21:40
个人简介

只有今天的埋头,才有明天的出头。

文章分类

全部博文(80)

文章存档

2014年(80)

我的朋友

分类: C/C++

2014-10-13 22:41:42

C语言中的数组参数为什么会退化为指针?

C语言中只会以值拷贝的方式传递参数,当向函数传递数组时

将整个数组拷贝一份传入函数(错的)

将数组名看做常量指针传输组首元素地址。(对的)

主要由于c语言以高效为最初设计目标,在函数传递时候如果拷贝整个数组执行效率将大大下降。

二维数组参数同样存在退化的问题?

二维数组可以看做是一维数组,二维数组中的每个元素是一维数组;

二维数组参数中的第一维的参数可以省略:

void f(int a[5]);

= =  __ void f(int a[]);//退化为数组名

==   __ void f(int* a);//相当于数组指针

 

void g(int a[3][3]);

==  __ void g(int a[][3]);//退化为数组名

==  __ void g(int (*a)[3]);//相当于数组指针

等价关系

注意!!

C中无法向一个函数传递任意的多维数组,为了提供正确的指针运算必须提供除第一维之外的所有维长度。限制:一维数值参数必须提供一个标示数组结束位置的长度信息(定义数组指针类型由数组大小还有元素类型共同决定),二维数组参数不能直接传递给参数(低效?),三维或更多维数组参数无法使用。

实例

阅读(1120) | 评论(0) | 转发(0) |
0

上一篇:阶段小结

下一篇:函数与指针

给主人留下些什么吧!~~