黑马程序员技术交流社区
标题:
关于数组传参数的问题
[打印本页]
作者:
Freedam
时间:
2014-5-20 13:32
标题:
关于数组传参数的问题
本帖最后由 Freedam 于 2014-5-22 20:24 编辑
在学习视频中的代码时遇到了一个数组传参数的问题。
//void change(int array[10])
//void change(int *array)
//void change(int array[])
//void change(int *array[10])
void change(int array[10])
{
array[0] = 100;
}
int main()
{
int ages[5] = {1,2,3,4,5};
change(ages);
printf("%d\n",ages[0]);
return 0;
}
复制代码
change函数我写了这几种方法都能改变第一个元素的值,int array[10]和int *array[10]不一样啊,为啥在传参数的时候再运行就得到一样的结果了呢,请大家看看,帮忙解惑。
作者:
戒惜舍得
时间:
2014-5-20 14:53
本帖最后由 戒惜舍得 于 2014-5-21 05:46 编辑
当你的行参 是 int array[10]的时候
注意 下面这句话
编译时,是将 array 按指针变量处理的,相当于将
void change(int array[10)) 写成
void change(int *array[10])
以上两种 写法是等价的
在 该函数被调用时, 系统会建立一个指针变量 array, 用来存放从主调函数传递过来的实参数组首元素的地址。
在李明杰 老师的 视频里 也讲了
假如 你用 数组 作为形参的话
用 sizeof 测定数组作占的字节数 为 8( 在苹果 的64位编译器下)。这就证明了 系统是把
数组作为指针变量来处理的。
当 array 接受了实参数组的首元素地址后,array 就指向实参数组的首元素,也就是指向 ages[0]。
因此, *array就是 array[0]。
array[0] 和 *array 以及 *array[0] 都代表数组 ages 序号为 0 的元素。
作者:
Freedam
时间:
2014-5-22 20:00
理解了 也就是系统内部已经把数组做了一些处理了 对吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2