1,形参和实参都用数组名:
传递的是实参数组首地址,形参与实参共用同一段内存单元。
int main()
{
int i;
int arr[10]={3,7,9,8,0,6,7,5,4,2};
void fxarray(int a[ ],int n);//声明函数
fxarray(arr,10);
for(i=0;i<10;i++){
printf("1,%d ",arr[i]);
}
return 0;
}
//a[ ]与arr[ ]具有相同的内存单元,即a[0]→arr[0]的值相等
void fxarray(int a[ ],int n){
int i,j,k,temp;
k=(n-1)/2;
for(i=0;i<=k;i++){
j=n-1-i;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
2,实参用数组名,形参用指针变量:
通过改变指针变量值,可以使指向实参数组的任一元素改变。
int main()
{
int i;
int *p;//声明指针变量
int arr[10]={3,7,9,8,0,6,7,5,4,2};
void fxarray2(int *p,int n);
fxarray2(arr,10);
for(i=0;i<10;i++){
printf("2,%d ",arr[i]);
}
return 0;
}
void fxarray2(int *p,int n){
//p变量对应a[0]的值
int i,j,k,temp;
k=(n-1)/2;
for(i=0;i<=k;i++){
j=n-1-i;
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
3,实参和形参都用指针变量:
先使实参指针变量指向arr数组的首地址,然后将实参的值传给形参,通过指针变量值得改变可以使其指向数组的每个元素。
int main()
{
int i;
int *p;
int arr[10]={3,7,9,8,0,6,7,5,4,2};
p=arr;//把arr数组首元素的地址赋给p
void fxarray3(int *p,int n);
//p=&arr[0];与p=arr同个意思,也可以这样子写int *p=arr[0];定义的同时赋值
fxarray3(p,10);
for(i=0;i<10;i++){
printf("3,%d ",arr[i]);
}
return 0;
}
void fxarray3(int *x,int n){
int i,j,k,temp;
k=(n-1)/2;
for(i=0;i<=k;i++){ //*x->arr[0];则*(x+1)->a[1]
j=n-1-i;//9,8,7,6
temp=*(x+i);
*(x+i)=*(x+j); //就是两个数组交换值,a[0]=a[9],a[1]=a[8]...
*(x+j)=temp;
}
}
4,实参为指针变量,形参为数组名:
设p为指针变量,令p=&arr[0](与p=arr等价)p指针变量为实参,x为数组名为形参,则函数调用时将p的值传给形参数组名x,也就是使其取得arr数组的首元素的地址,使x数组和arr数组共用一段内存单元。
int main()
{
int i;
int *p;
int arr[10]={3,7,9,8,0,6,7,5,4,2};
void fxarray4(int x[],int n);
p=&arr[0];
fxarray4(p,10);
for(i=0;i<10;i++){
printf("4,%d ",arr[i]);
}
return 0;
}
void fxarray4(int x[],int n){
int i,j,k,temp;
k=(n-1)/2;
for(i=0;i<=k;i++){
j=n-1-i;
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}