数组名作为函数参数
例:
#include <stdafx.h> #include<stdio.h> void f(int arr[],int n) { …… } void main() { int array[10]; …… f(array 10); } f(int arr[],int n)
在编译时是将arr按指针变量处理的,相当于将函数f的首部写成f(int *arr,int n);
说明:C语言调用函数时采用“值传递”方式,当用变量名作为函数参数时传递的是变量的值,当用数组名作为函数参数时,由于数组名代表的是数组首元素地址,因此传递的是地址,所以要求形参为指针变量。
例:将数组a中的n个整数按相反顺序存放。
#include <stdafx.h> #include<stdio.h> void reverse(int x[],int n); void main() { int i,a[10]={1,2,3,4,5,6,7,8,9,0}; printf("The original arry:\n"); for(i=0;i<10;i++) { printf("%6d",a[i]); } printf("\n"); reverse( a,9); } void reverse(int x[],int n) { int i; for(i=n;i>=0;i--) { printf("%6d",x[i]); } }
用指针做参数
#include <stdafx.h> #include<stdio.h> void reverse(int *p,int n); void main() { int i,a[10]={1,2,3,4,5,6,7,8,9,0},*p; printf("The original arry:\n"); for(i=0;i<10;i++) { printf("%6d",a[i]); } p=a; printf("\n"); reverse( p,9); } void reverse(int *p,int n) { int i; for(i=n;i>=0;i--) { printf("%6d",*(p+i)); } }
若有一个实参数组,想在函数中改变此数组中的元素的值,实参与形参的对应关系有以下4中情况。
(1)形参和实参都用数组名。
例:
#include <stdafx.h> #include<stdio.h> void main() { int a[10];
f(a,10) ; } void f(int x[],int n) { …… }
(2)实参用数组名,形参用指针变量。
例:
#include <stdafx.h> #include<stdio.h> void main() { int a[10];
f(a,10) ; } void f(int *a,int n) { …… }
(3)实参形参都用指针变量。
例:
#include <stdafx.h> #include<stdio.h> void main() { int a[10],*p=a ;//此处*为定义p为指针变量。
f(p,10); } void f(int *x,int n) { …… }
(4)实参为指针变量,形参为数组名。
例:
#include <stdafx.h> #include<stdio.h> void main() { int a[10], *p=a ;//此处*为定义p为指针变量 f(p,10); } void f(int x[],int n) { …… }