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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我爱吃丶柠檬 中级黑马   /  2014-11-19 15:34  /  1187 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我看到数组那一块了,下面是我的代码,如果在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. }
复制代码


评分

参与人数 1黑马币 +1 收起 理由
星河鹭起 + 1

查看全部评分

2 个回复

倒序浏览
你说的都没错啊,test调用的时候确实只传递了ages[]的地址也就是ages[0]的地址,所以也只会改变ages[0]的值,不应该有什么疑问啊……而且不太明白你为什么把主函数定义为空类型,你cc的时候不警告吗……

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

5F5C766C-48BD-489B-A3F4-997D58C952D5.png
回复 使用道具 举报
彈指っ紅顏老 发表于 2014-11-19 17:45
你说的都没错啊,test调用的时候确实只传递了ages[]的地址也就是ages[0]的地址,所以也只会改变ages[0]的值 ...

不对啊,不会改变ages[0]的吧,当它作为实参传递就跟传递普通变量没区别,所以应该不会改变地址吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马