黑马程序员技术交流社区

标题: 看视频中,想提一个问题 [打印本页]

作者: 我爱吃丶柠檬    时间: 2014-11-19 15:34
标题: 看视频中,想提一个问题
我看到数组那一块了,下面是我的代码,如果在main中调用test1函数时传入数组的话会改变array[0]的值,但是test传入array[0]时则不会改变,传入数组是传入数组的地址过去,则会改变,但是数组的地址不是等于数组的第一个元素的字节地址吗?虽然看到解释说,一位数组的元素作为实参与一般变量作为实参一样,是单向值传递不会改变地址。但是还是感觉很别扭啊。
  1. void test(int a)
  2. {
  3.         a = 9;
  4. }

  5. void test(int b[])
  6. {
  7.         b[0] = 9;
  8. }

  9. void main()
  10. {

  11.         int ages[3];
  12.         ages[0] = 10;

  13.         printf("调用前:%d\n",ages[0]);
  14.         test(ages);
  15.         printf("调用后:%d\n",ages[0]);
  16. }
复制代码



作者: 彈指っ紅顏老    时间: 2014-11-19 17:45
你说的都没错啊,test调用的时候确实只传递了ages[]的地址也就是ages[0]的地址,所以也只会改变ages[0]的值,不应该有什么疑问啊……而且不太明白你为什么把主函数定义为空类型,你cc的时候不警告吗……

5F5C766C-48BD-489B-A3F4-997D58C952D5.png (103.69 KB, 下载次数: 15)

5F5C766C-48BD-489B-A3F4-997D58C952D5.png

作者: 我爱吃丶柠檬    时间: 2014-11-20 15:11
彈指っ紅顏老 发表于 2014-11-19 17:45
你说的都没错啊,test调用的时候确实只传递了ages[]的地址也就是ages[0]的地址,所以也只会改变ages[0]的值 ...

不对啊,不会改变ages[0]的吧,当它作为实参传递就跟传递普通变量没区别,所以应该不会改变地址吧




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