配列名を関数パラメーターとして使用します。
配列名は配列の最初のアドレスを表すため、配列名が実際のパラメーターとして渡されると、仮パラメーターは実際のパラメータータイプのポインター変数を格納できます。
表現:
- void fun(int arr []、int n);
- void fun(int * arr、int n);
2つの表現は同等です。
ことを説明する
C言語の関数を呼び出すときに、仮想と現実の組み合わせの方法は、「値の転送」方式を採用している。変数名が関数のパラメータとして使用される場合、配列名が表すので、変数の値が渡され、配列名を関数のパラメータとして使用される場合配列の最初の要素のアドレス。渡される値はアドレスであるため、仮パラメーターはポインター変数である必要があります。
例:
n個の整数を逆の順序で配列aに格納します。
#include<stdio.h>
void reverse(int a[],int n);
int main()
{
int a[10]={
2,4,3,1,5,0,9,8,7,6};
int i;
printf("输出原始数据!\n");
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
reverse(a,10);
printf("按相反顺序存放后\n");
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
printf("\n");
return 0;
}
void reverse(int a[],int n)
{
int t,i,j,m;
m=(n-1)/2;
for(i=0;i<=m;i++)
{
j=n-1-i;
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
サブ関数アルゴリズムは、典型的なタイプの半分に属します。
サブ機能のこのセクションでは、ポインタを使用できます。アドレスを累積できることを教えてください...そして、対応するシーケンス番号を追加して要素を表すことができます。
void reverse(int *a,int n)
{
int *p,t,*i,*j,m;
m=(n-1)/2;
i=a;//不加数字时是指数组第一个元素
j=a-1+n;//指向的是数组最后一个元素
p=a+m;
for(;i<=p;i++,j--)
{
t=*i;
*i=*j;
*j=t;
}
}