C言語学習-ポインターの適用2

ポインタ2を使用する理由:
ポインタ変数を関数パラメータとして使用し、変数のアドレスを別の関数に転送できます。
たとえば、次の関数を実装できます。入力2つの整数がサイズに応じて出力されます(処理済み)関数法による)

#include <stdio.h>

int  main()
{
    
    
	void swap(int *p1, int *p2);
	int a, b;
	int *n1, *n2; 
	scanf_s("%d,%d", &a, &b);
	n1 = &a;
	n2 = &b;
	if (a < b) swap(&a, &b);
	printf("max =%d,min =%d\n,", a, b);
	return 0;
}
void swap(int  *p1,int *p2)
{
    
    
	int temp;
	temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

ここに画像の説明を挿入
結果はabの値を交換することですが、p1とp2の値は変更されません。

ただし、スワップ機能をに変更すると

#include <stdio.h>

int  main()
{
    
    
	void swap(int p1, int p2);
	int a, b;
	int *n1, *n2; 
	scanf_s("%d,%d", &a, &b);
	n1 = &a;
	n2 = &b;
	if (a < b) swap(a, b);
	printf("max =%d,min =%d\n,", a, b);
	return 0;
}
void swap(int  p1,int p2)
{
    
    
	int temp;
	temp = p1;
	p1 = p2;
	p2 = temp;
}

ここに画像の説明を挿入
結果は正しくありません。理由は、スワップ関数が実行された後、xとyの値が交換されますが、aとbの値は影響を受けません。関数の最後に、変数xおよびyが解放され、メイン関数のa、bは交換されません。また、正式なパラメーター値を変更しても、実際のパラメーター値を変更することはできません。
つまり、main関数の一部の変数の値を変更するには、関数パラメーターとしてポインター変数を使用する必要があります。関数を実行すると、ポインター変数が指す値が変更されるためです。ポインタが使用されます。

おすすめ

転載: blog.csdn.net/jinanhezhuang/article/details/119007683