ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

ref引数

プログラミングC# p88

VBっぽくもあり、C言語っぽくもある感じ。
参照渡しなので、関数の中で書き換えたら呼び出し元にも影響あります。

using System;

class ParamTest
{
        static void refParam(ref int param)
        {
                param *= 2;
                Console.WriteLine("param = {0} @ refParam", param);
        }

        static void Main(string[] args)
        {
                int i = 10;

                refParam(ref i);

                Console.WriteLine("i = {0} @ Main", i);
        }
}

結果はこう。

param = 20 @ refParam
i = 20 @ Main

Cで書いたらこんな感じ?

#include <stdio.h>

void refParam(int* param)
{
        *param *= 2;
        printf("param = %i @ refParam\n", *param);
}

int main()
{
        int i = 10;

        refParam(&i);

        printf("i = %i @ Main\n", i);
}

結果は同じくこう。

param = 20 @ refParam
i = 20 @ Main

ちなみにRubyには参照渡しっていう概念がないようです。
Rubyリファレンスマニュアル / FAQ::変数、定数、引数 / 2.6 仮引数に代入すると実引数に影響を及ぼしますか
Javaにもないです。多分。