数组做为函数参数时的几种情况
摘自C程序设计(第三版),谭浩强
如果有一个实参数组,要想在函数中改变此数组中的元素的值,实参和形参的对应关系有4种情况。
1.形参和实参都用数组名
1 void main() 2 { 3 int a[10]; 4 ... 5 f(a,10) 6 } 7 8 void f(int x[],int n) 9 { 10 ... 11 } 12 13 //由于形参数组名接收了实参数组首元素的地址,因此可以认为在函数调用期间,形参数组与实//参数组共用一段内存单元,这种形式比较好理解
2.实参用数组名,形参用指针变量
1 void main() 2 { 3 int a[10]; 4 ... 5 f(a,10) 6 } 7 8 void f(int *x,int n) 9 { 10 ... 11 } 12 13 //实参a为数组名,形参x指向整型变量的指针变量,函数开始执行时,x指向a[0],x=&a[0],//通过x值的改变,可以指向a数组的任一元素。
3.实参形参都用指针变量
1 void main() 2 { 3 int a[10]; 4 int *p = a; 5 ... 6 f(p,10) 7 } 8 9 void f(int *x,int n) 10 { 11 ... 12 }
4.实参为指针变量,形参为数组名
1 void main() 2 { 3 int a[10]; 4 int *p = a; 5 ... 6 f(p,10) 7 } 8 9 void f(int x[],int n) 10 { 11 ... 12 } 13 14 //形参x为数组名,编译系统把x作为指针变量处理