ポインター学習(3)

配列名を関数パラメーターとして使用します。
配列名配列の最初のアドレスを表すため、配列名が実際のパラメーターとして渡されると、仮パラメーターは実際のパラメータータイプのポインター変数を格納できます。

表現:

  1. void fun(int arr []、int n);
  2. 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;
	}
}

おすすめ

転載: blog.csdn.net/yooppa/article/details/112796000