受け取った配列への書き込み

明解C言語 入門編 > 6. 関数 >

受け取った配列への書き込み

C


#include <stdio.h>

#define NINSU 5

void int_set(int vc[], int no)
{
int i;
for (i = 0; i < no; i++)
vc[i] = i;

no = 0;
}

int main(int argc, char* argv[])
{
int i = NINSU;
int j;
int ary[NINSU] = {0};

printf("関数 呼び出し前\n");
printf(" i = %d\n", i);
for (j = 0; j < NINSU; j++)
printf(" ary[%d] = %d\n", j, ary[j]);

int_set(ary, i);

printf("関数 呼び出し後\n");
printf(" i = %d\n", i);
for (j = 0; j < NINSU; j++)
printf(" ary[%d] = %d\n", j, ary[j]);

return 0;
}

実行結果


R:\>lesson048\project1.exe
関数 呼び出し前
i = 5
ary[0] = 0
ary[1] = 0
ary[2] = 0
ary[3] = 0
ary[4] = 0
関数 呼び出し後
i = 5
ary[0] = 0
ary[1] = 1
ary[2] = 2
ary[3] = 3
ary[4] = 4

Delphi


program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

procedure int_set1(vc:array of Integer; no: Integer);
var
i: Integer;
begin
for i := Low(vc) to High(vc) do
vc[i] := i;

no := 0;
end;

procedure int_set2(var vc:array of Integer; var no: Integer);
var
i: Integer;
begin
for i := Low(vc) to High(vc) do
vc[i] := i;

no := 0;
end;

const
NINSU = 5;
var
i: Integer = NINSU;
j: Integer;
ary: array[1..NINSU] of Integer = (0, 0, 0, 0, 0);
begin
writeln('関数 呼び出し前');
writeln(format(' i = %d', [i]));
for j := 1 to NINSU do
writeln(format('ary[%d] = %d', [j, ary[j]]));

int_set1(ary, i);

writeln('関数 呼び出し後 1');
writeln(format(' i = %d', [i]));
for j := 1 to NINSU do
writeln(format('ary[%d] = %d', [j, ary[j]]));

int_set2(ary, i);

writeln('関数 呼び出し後 2');
writeln(format(' i = %d', [i]));
for j := 1 to NINSU do
writeln(format('ary[%d] = %d', [j, ary[j]]));
end.

実行結果


S:\>lesson048\project1.exe
関数 呼び出し前
i = 5
ary[1] = 0
ary[2] = 0
ary[3] = 0
ary[4] = 0
ary[5] = 0
関数 呼び出し後 1
i = 5
ary[1] = 0
ary[2] = 0
ary[3] = 0
ary[4] = 0
ary[5] = 0
関数 呼び出し後 2
i = 0
ary[1] = 1
ary[2] = 2
ary[3] = 3
ary[4] = 4
ary[5] = 5

Perl
$NINSU = 5;

sub int_set
{
    (@vc) = @_;
    $no = $vc[0];

    for (1..$no)
    {
        $vc[$_] = $_;
    }
}

sub int_set2
{
    ($no, $vc) = @_;

    for (0..$$no - 1)
    {
        $$vc[$_] = $_;
    }
}

@ary = ();

print "関数 呼び出し前\n";
for (0..$NINSU - 1)
{
    printf("  ary[%d] = %d\n", $_, @ary[$_]);
}

&int_set($NINSU, @ary);

print "関数 呼び出し後\n";
for (0..$NINSU - 1)
{
    printf("  ary[%d] = %d\n", $_, @ary[$_]);
}

&int_set2(\$NINSU, \@ary);

print "関数 呼び出し後\n";
for (0..$NINSU - 1)
{
    printf("  ary[%d] = %d\n", $_, @ary[$_]);
}

実行結果

L:\>perl lesson_06_048.pl
関数 呼び出し前
ary[0] = 0
ary[1] = 0
ary[2] = 0
ary[3] = 0
ary[4] = 0
関数 呼び出し後
ary[0] = 0
ary[1] = 0
ary[2] = 0
ary[3] = 0
ary[4] = 0
関数 呼び出し後
ary[0] = 0
ary[1] = 1
ary[2] = 2
ary[3] = 3
ary[4] = 4

Ruby
NINSU = 5

def int_set(no, vc)
    for i in 0..(no - 1)
        vc[i] = i
    end
end

ary = []

puts "関数 呼び出し前"
for i in 0..(NINSU - 1)
    printf("  ary[%d] = %d\n", i, ary[i])
end

int_set(NINSU, ary)

puts "関数 呼び出し後"
for i in 0..(NINSU - 1)
    printf("  ary[%d] = %d\n", i, ary[i])
end

実行結果

L:\>ruby l:\lesson_06_048.rb
関数 呼び出し前
ary[0] = 0
ary[1] = 0
ary[2] = 0
ary[3] = 0
ary[4] = 0
関数 呼び出し後
ary[0] = 0
ary[1] = 1
ary[2] = 2
ary[3] = 3
ary[4] = 4