「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関数に書いてしまうほうがラクだろう。
 
----
ユーザ定義関数を何も書かずに全て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関数を書いても、交換できない。