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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 18503582292 中级黑马   /  2015-9-9 21:08  /  864 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 18503582292 于 2015-9-14 19:07 编辑

今天学习完有一个疑惑。我知道定义一个void函数来调换变量a,b 的值是不可以的,最后它会释放,不会对实参的变量有影响。但是我想知道的是为什么数组元素的值却可以定义一个void函数来进行交换?

5 个回复

倒序浏览
因为你传的是数组的下标
回复 使用道具 举报
数组在传递的时候不是值传递,而是指针传递。
int array[10];
void setArray(int a[]);//这个函数在调用的时候是setArray(array);传递整个数组,但是其实传递的是array的首地址,相当于
int *p=array[0];setArray(p);
编译器在检查声明的时候,在void setArray(int a[]);发现int后的a有[],便认定此处的数据类型其实是一个整形指针。所以也可以写成(int *a);

void setElement(int a);//这个函数在调用的时候是setElement(array[i]);
由于是对单个数值进行值传递的操作,因此传递数组的元素,需要包括下标,这个时候就是普通的值传递,数组元素的值不会改变。它和传递普通的参数是一样的。

评分

参与人数 1黑马币 +1 收起 理由
18503582292 + 1 很给力!

查看全部评分

回复 使用道具 举报
lixj1991 发表于 2015-9-10 14:07
数组在传递的时候不是值传递,而是指针传递。
int array[10];
void setArray(int a[]);//这个函数在调用的 ...

说的真清楚
回复 使用道具 举报
习惯性进来学习学习!
回复 使用道具 举报
hongguihao 发表于 2015-9-11 15:16
习惯性进来学习学习!

加油了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马