黑马程序员技术交流社区

标题: 关于变量交换的疑惑 [打印本页]

作者: 18503582292    时间: 2015-9-9 21:08
标题: 关于变量交换的疑惑
本帖最后由 18503582292 于 2015-9-14 19:07 编辑

今天学习完有一个疑惑。我知道定义一个void函数来调换变量a,b 的值是不可以的,最后它会释放,不会对实参的变量有影响。但是我想知道的是为什么数组元素的值却可以定义一个void函数来进行交换?
作者: a124113798    时间: 2015-9-9 21:38
因为你传的是数组的下标
作者: lixj1991    时间: 2015-9-10 14:07
数组在传递的时候不是值传递,而是指针传递。
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]);
由于是对单个数值进行值传递的操作,因此传递数组的元素,需要包括下标,这个时候就是普通的值传递,数组元素的值不会改变。它和传递普通的参数是一样的。
作者: 18503582292    时间: 2015-9-10 14:23
lixj1991 发表于 2015-9-10 14:07
数组在传递的时候不是值传递,而是指针传递。
int array[10];
void setArray(int a[]);//这个函数在调用的 ...

说的真清楚
作者: hongguihao    时间: 2015-9-11 15:16
习惯性进来学习学习!
作者: 18503582292    时间: 2015-9-11 21:51
hongguihao 发表于 2015-9-11 15:16
习惯性进来学习学习!

加油了。




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