• 数组名作为函数参数


    例:

    #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:
    ");
        for(i=0;i<10;i++)
        {
            printf("%6d",a[i]);
        }
        printf("
    ");
        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:
    ");
        for(i=0;i<10;i++)
        {
            printf("%6d",a[i]);
        }
        p=a;
        printf("
    ");
        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)
    {
        ……
    }
  • 相关阅读:
    Python装饰器之functools.wraps的作用
    [转]scala和RDD中的占位符"_"
    Scala,Java,Python 3种语言编写Spark WordCount示例
    CentOS系统安装Python3
    [爬虫]采用Go语言爬取天猫商品页面
    go语言的排序和去重
    go语言字符串的连接和截取
    [转]git commit --amend用法
    KM算法小结
    Protocol Buffers学习教程
  • 原文地址:https://www.cnblogs.com/lvfengkun/p/10355600.html
Copyright © 2020-2023  润新知