c言語関数パラメーターの転送

手順1:値を渡す

#include<iostream>
#include<cstdio>

using namespace std;

void Exchg1(int x, int y)
{
	int tmp;
	tmp = x;
	x = y;
	y = tmp;
	printf("x = %d, y = %d\n",x, y);
}

int main()
{
	int a = 4, b = 6;
	Exchg1(a, b);
	printf("a = %d, b = %d\n", a, b);
	return 0;
} 

Exchg1で交換されましたが、メイン機能では動作しませんでした。

理由:関数が呼び出されると、実際のパラメーターaおよびbの値がxおよびyに暗黙的に割り当てられ、作成された関数本体のaおよびbに対してこれ以上の操作は実行されません。交換は単にx、y変数です。a、bではありません。もちろん、aとbの値は変更されていません。関数は、aとbの値を有料の値を介してxとyに渡すだけです。関数の演算は、xとyの値がaとbの値ではないということです。これは値渡しと呼ばれます。

手順2:アドレス転送

#include<iostream>
#include<cstdio>

using namespace std;

void Exchg1(int *x, int *y)
{
	int tmp;
	tmp = *x;
	*x = *y;
	*y = tmp;
	printf("x = %d, y = %d\n",*x, *y);
}

int main()
{
	int a = 4, b = 6;
	Exchg1(&a, &b);
	printf("a = %d, b = %d\n", a, b);
	return 0;
} 

デジタルスワップを実現します。

関数の暗黙のコピー操作は、aとbのアドレスをxとyに与えることです。ポインタxとyの値は、それぞれa変数とb変数のアドレス値であることがわかります。次に、* x、* yの演算はもちろん、aおよびb変数自体の演算です。

手順3:参照渡し

#include<iostream>
#include<cstdio>

using namespace std;

void Exchg1(int &x, int &y)
{
	int tmp;
	tmp = x;
	x = y;
	y = tmp;
	printf("x = %d, y = %d\n",x, y);
}

int main()
{
	int a = 4, b = 6;
	Exchg1(a, b);
	printf("a = %d, b = %d\n", a, b);
	return 0;
} 

デジタルスワップを実現します。

xとyは、それぞれaとb変数を参照します。このように、関数の実際の操作は、実際のパラメーターa、b自体です。つまり、関数をa、bの値に直接変更できます。

値の受け渡しと参照の受け渡しの違い:

1:関数定義フォーマットが異なります。

2:呼び出されたときと同じフォーマット。

3:機能が異なります。(1つの操作は変数自体ではなく、1つはそれ自体です)

158の元の記事を公開 いいね10 訪問者20,000以上

おすすめ

転載: blog.csdn.net/ab1605014317/article/details/105590456