A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Freedam 中级黑马   /  2014-5-20 13:32  /  1562 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Freedam 于 2014-5-22 20:24 编辑

在学习视频中的代码时遇到了一个数组传参数的问题。
  1. //void change(int array[10])
  2. //void change(int *array)
  3. //void change(int array[])
  4. //void change(int *array[10])
  5. void change(int array[10])
  6. {
  7.       array[0] = 100;
  8. }

  9. int main()
  10. {
  11.     int ages[5] = {1,2,3,4,5};
  12.     change(ages);
  13.     printf("%d\n",ages[0]);
  14.     return 0;
  15. }
复制代码

change函数我写了这几种方法都能改变第一个元素的值,int array[10]和int *array[10]不一样啊,为啥在传参数的时候再运行就得到一样的结果了呢,请大家看看,帮忙解惑。

评分

参与人数 1技术分 +1 收起 理由
wanzhu159 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 戒惜舍得 于 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  的元素。

评分

参与人数 1技术分 +1 收起 理由
wanzhu159 + 1

查看全部评分

回复 使用道具 举报
理解了 也就是系统内部已经把数组做了一些处理了 对吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马