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