数组名作为函数参数

例:

#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)
{
    ……
}

 

posted @ 2019-02-07 21:53  巫师笔记  阅读(6097)  评论(0编辑  收藏  举报