ポインタ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関数の一部の変数の値を変更するには、関数パラメーターとしてポインター変数を使用する必要があります。関数を実行すると、ポインター変数が指す値が変更されるためです。ポインタが使用されます。