數組名作為函數參數


例:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM