「C言語/関数」の版間の差分
削除された内容 追加された内容
717 行
:ポインタを使った例「正しいswap関数」のように実引数のアドレスを仮引数にコピーすることを''参照渡し''と呼ぶ。
<ref>値渡しと参照渡しという用語はよく使われるが、『JISX3010:2003』には出てこない。</ref>
----
ユーザ定義関数を何も書かずに全てmain関数に書く方法を使えば、ポインタを使わずとも交換できる。▼
標準C言語では考える必要は無いが、別のプログラム言語だと、言語によってはポインタが標準設定では使用禁止されていたり(たとえばC#がそうである)、そもそもポインタに相当する機能の無い言語も考えられる。そのような場合でも、下記コードのようなアルゴリズムで、変数の交換は可能である。
<syntaxhighlight lang="C">▼
//例 swap関数を使わない場合▼
#include "stdio.h"▼
int main(){▼
int a = 1, b = 2;▼
printf("swap前のa=%d, b=%d\n", a, b);▼
int x;▼
x = a;▼
a = b;▼
b = x;▼
printf("swap後のa=%d, b=%d\n", a, b);▼
}▼
</syntaxhighlight>▼
<pre>▼
swap前のa=1, b=2▼
swap後のa=2, b=1▼
</pre>▼
----
755 ⟶ 785行目:
しかし、上記の方法は、かなり技巧的である。いっそ
----
▲ユーザ定義関数を何も書かずに全てmain関数に書く方法を使えば、ポインタを使わずとも交換できる。
▲<syntaxhighlight lang="C">
▲//例 swap関数を使わない場合
▲#include "stdio.h"
▲int main(){
▲ int a = 1, b = 2;
▲ printf("swap前のa=%d, b=%d\n", a, b);
▲ int x;
▲ x = a;
▲ a = b;
▲ b = x;
▲ printf("swap後のa=%d, b=%d\n", a, b);
▲}
▲</syntaxhighlight>
▲<pre>
▲swap前のa=1, b=2
▲swap後のa=2, b=1
▲</pre>
なお、ポインタも使わず、グローバル変数を使わずに下記のようにswap関数を書いても、交換できない。
|