前两天同学问了我一个问题:“数组名和指针有什么区别,或者说这两者有没有区别?”
我回顾了下,大学课堂上老师讲的,貌似记得老师说数组名就相当于指针,比如:“一维数组就是一级指针”,“二维数组是二级指针”之类的。结果同学告诉说原来我也是这么理解的,其实“数组名与指针有着本质的区别”,然后给我推荐了一篇博文。
下面我将我自己看到的这篇博文转载到这里,希望以后能记住这个重大的区别:
1.2 在数组名并非指针这个问题上,通常会产生两种疑问:
1。作为形参的数组,不是会被转换为指针吗?
2。如果形参是一个指针,数组名可以作为实参传递给那个指针,难道不是说明了数组名是一个指针吗?
第二,函数参数传递的过程,本质上是一种赋值过程。C对函数调用是这样规定的:函数调用由一个后缀表达式(称为函数标志符,function designator)后跟由圆括号括起来的赋值表达式列表组成,在调用函数之前,函数的每个实际参数将被复制,所有的实际参数严格地按值传递。因此,形参实际上所期望得到的东西,并不是实参本身,而是实参的值或者实参所代表的值!举个例来说,对于一个函数声明:
void fun(int i);