2つの値を交換する

明解C言語 入門編 > 10. ポインタ >

2つの値を交換する

C


#include <stdio.h>

void swap1(int nx, int ny)
{
int tmp = nx;
nx = ny;
ny = tmp;
}

void swap2(int* nx, int* ny)
{
int tmp = *nx;
*nx = *ny;
*ny = tmp;
}

int main(int argc, char* argv[])
{
int na = 57;
int nb = 21;

printf("整数A:%d\n", na);
printf("整数B:%d\n", nb);
puts("");

swap1(na, nb);

printf("整数A:%d\n", na);
printf("整数B:%d\n", nb);
puts("");

na = 57;
nb = 21;
swap2(&na, &nb);

printf("整数A:%d\n", na);
printf("整数B:%d\n", nb);
puts("");

return 0;
}

実行結果


R:\>lesson077\Project1.exe
整数A:57
整数B:21

整数A:57
整数B:21

整数A:21
整数B:57

C++


#include <stdio.h>

void swap1(int nx, int ny)
{
int tmp = nx;
nx = ny;
ny = tmp;
}

void swap3(int& nx, int& ny)
{
int tmp = nx;
nx = ny;
ny = tmp;
}

int main(int argc, char* argv[])
{
int na = 57;
int nb = 21;

printf("整数A:%d\n", na);
printf("整数B:%d\n", nb);
puts("");

swap1(na, nb);

printf("整数A:%d\n", na);
printf("整数B:%d\n", nb);
puts("");

na = 57;
nb = 21;
swap3(na, nb);

printf("整数A:%d\n", na);
printf("整数B:%d\n", nb);
puts("");

return 0;
}

実行結果


T:\>lesson077\Project1.exe
整数A:57
整数B:21

整数A:57
整数B:21

整数A:21
整数B:57

Delphi


program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

procedure swap1(nx:Integer; ny:Integer);
var
tmp: Integer;
begin
tmp := nx;
nx := ny;
ny := tmp;
end;

procedure swap2(var nx:Integer; var ny:Integer);
var
tmp: Integer;
begin
tmp := nx;
nx := ny;
ny := tmp;
end;

procedure swap3(nx:PInteger; ny:PInteger);
var
tmp: Integer;
begin
tmp := nx^;
nx^ := ny^;
ny^ := tmp;
end;

procedure main();
var
na, nb: Integer;
begin
na := 57;
nb := 21;

Writeln(Format('整数A:%d', [na]));
Writeln(Format('整数B:%d', [nb]));
Writeln('');

swap1(na, nb);

Writeln(Format('整数A:%d', [na]));
Writeln(Format('整数B:%d', [nb]));
Writeln('');

na := 57;
nb := 21;
swap2(na, nb);

Writeln(Format('整数A:%d', [na]));
Writeln(Format('整数B:%d', [nb]));
Writeln('');

na := 57;
nb := 21;
swap3(@na, @nb);

Writeln(Format('整数A:%d', [na]));
Writeln(Format('整数B:%d', [nb]));
Writeln('');
end;

begin
main;
end.

実行結果


S:\>lesson077\Project1.exe
整数A:57
整数B:21

整数A:57
整数B:21

整数A:21
整数B:57

整数A:21
整数B:57

Perl
sub swap1
{
    my ($nx, $ny) = @_;
    my $tmp = $nx;
    $nx = $ny;
    $ny = $tmp;
}

sub swap2
{
    my ($nx, $ny) = @_;
    my $tmp = $$nx;
    $$nx = $$ny;
    $$ny = $tmp;
}

$na = 57;
$nb = 21;

printf("整数A:%d\n", $na);
printf("整数B:%d\n", $nb);
print "\n";

&swap1($na, $nb);

printf("整数A:%d\n", $na);
printf("整数B:%d\n", $nb);
print "\n";

$na = 57;
$nb = 21;
&swap2(\$na, \$nb);

printf("整数A:%d\n", $na);
printf("整数B:%d\n", $nb);
print "\n";

$na = 57;
$nb = 21;
($na, $nb) = ($nb, $na);

printf("整数A:%d\n", $na);
printf("整数B:%d\n", $nb);
print "\n";

実行結果

L:\>perl lesson_10_077.pl
整数A:57
整数B:21

整数A:57
整数B:21

整数A:21
整数B:57

整数A:21
整数B:57

Ruby
def swap1(nx, ny)
    tmp = nx
    nx  = ny
    ny  = tmp
end

def swap2(nx, ny)
    return ny, nx
end

na = 57
nb = 21

printf("整数A:%d\n", na)
printf("整数B:%d\n", nb)
puts ""

swap1(na, nb)

printf("整数A:%d\n", na)
printf("整数B:%d\n", nb)
puts ""

na, nb = nb, na

printf("整数A:%d\n", na)
printf("整数B:%d\n", nb)
puts ""

na = 57
nb = 21
na, nb = swap2(na, nb)

printf("整数A:%d\n", na)
printf("整数B:%d\n", nb)

実行結果

L:\>ruby l:\lesson_10_077.rb
整数A:57
整数B:21

整数A:57
整数B:21

整数A:21
整数B:57

整数A:21
整数B:57