ポインタ変数と引数


C言語テストコード

 前回はポインタ変数の宣言と概要について解説しました(前回の記事)。今回は実用的な使い方の一例としてポインタを関数の引数として使用する方法について解説します。ポインタ変数にはメモリのアドレスが入ると前回解説しましたが引数として使う場合も同じでアドレスが関数に渡されます。下記にサンプルコードを書きます。

#include <stdio.h>

//ポインタ変数テストプログラム
void pTest(int *xp,int *yp)
{
    *xp=*xp*10;  //xのアドレス先の値を10倍
    *yp=*yp*10;  //yのアドレス先の値を10倍
}

int main()
{
    int x=50;
    int y=10;

    pTest(&x,&y);  //xとyのアドレスを関数に渡す

    printf("x=%d\n",x);
    printf("y=%d\n",y);
    return 0;
}

VBAテストコード

 VBAは引数にByRefと付けるとポインタ変数と同じでアドレスを渡します。こちらでも解説しましたがByValにすると値を渡すことになるので下記サンプルコードでは結果が変わります。補足としてByRefは省略可能です。

'VBA
Option Explicit

'ポインタテストプログラム
Sub pTest(ByRef xp As Integer, ByRef yp As Integer)
    xp = xp * 10  'xのアドレス先の値を10倍
    yp = yp * 10  'yのアドレス先の値を10倍
End Sub

Sub main()
    Dim x As Integer
    Dim y As Integer
    x = 50
    y = 10

    Call pTest(x, y)  'xとyのアドレスを関数に渡す

    MsgBox ("x=" + CStr(x))
    MsgBox ("y=" + CStr(y))
End Sub

実行するとx=500、y=100と出力されたと思います。以前変数は宣言された関数内でしか使用できないと解説しましたが(変数の有効範囲について)その変数をポインタ変数にしてアドレスを渡すことでどの関数からもアクセスできるようになります。ただこんなややこしいことをしなくてもグローバル変数にすれば同じことができます。この内容は難しいので今はポインタ変数を使った方が動作が軽くて速いくらいに思っていれば大丈夫です。なぜなら今のPCは性能が良いのでサンプルコード程度の処理であれば違いは感じられないからです。ただ日頃から軽くて速いコードを書く癖を身につけておくといつの間にかプログラミングのレベルがかなり上がります。
 次回はアドレスと配列について記載します。

,

コメントを残す