黑马程序员技术交流社区

标题: 有个小疑惑 [打印本页]

作者: onefiter    时间: 2014-11-26 08:39
标题: 有个小疑惑
  1. // b是test函数的形参(形式参数)
  2. void test(int b[]) { // 也可以写int b[3]
  3.     b[0] = 9;
  4. }

  5. int main()
  6. {
  7.     int a[3];
  8.     a[0] = 10;
  9.    
  10.     printf("函数调用前的a[0]:%d\n", a[0]);
  11.    
  12.     test(a); // a是test函数的实参(实际参数)

  13.     printf("函数调用后的a[0]:%d", a[0]);
  14.     return 0;
  15. }
复制代码

15114042-a2f9aeea8e7b44d989a3b5f4bdef2d35.png (5.81 KB, 下载次数: 5)

15114042-a2f9aeea8e7b44d989a3b5f4bdef2d35.png

作者: onefiter    时间: 2014-11-26 08:41
第二个a[0]:9 不太明白,请大神指教一下
作者: HM_lpn    时间: 2014-11-26 09:00
test(a);参数是数组名字,数组名字其实是数组的首地址,这是引用传递,不是值得传递  a指向了第一个元素为9的数组的首地址
作者: 依米阳光    时间: 2014-11-26 09:21
楼主多学习一下值类型和引用类型就明白了
作者: Jr_711    时间: 2014-11-26 13:04
调用函数时传递的是地址,修改的就是原数组,b[0]和a[0]指向的是同一个元素,b[0]=9;所以a[0]=9
作者: zhao190109    时间: 2014-11-26 14:15
参数是数组名字,数组名字其实是数组的首地址
作者: onefiter    时间: 2014-11-26 19:20
HM_lpn 发表于 2014-11-26 09:00
test(a);参数是数组名字,数组名字其实是数组的首地址,这是引用传递,不是值得传递  a指向了第一个元素为9 ...

嗯,谢谢指导
作者: onefiter    时间: 2014-11-26 19:23
依米阳光 发表于 2014-11-26 09:21
楼主多学习一下值类型和引用类型就明白了

嗯,好,会多多学习的
作者: onefiter    时间: 2014-11-26 19:24
HM_lpn 发表于 2014-11-26 09:00
test(a);参数是数组名字,数组名字其实是数组的首地址,这是引用传递,不是值得传递  a指向了第一个元素为9 ...

谢谢指导,恍然大悟:lol




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2