改变数组中元素的值,实参和形参的对应关系有以下4中情况

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;

    }

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值