C/400

35. 高速化のためのポインター使用

「21.ポインターとは?」でポインターの解説を既に行っているが関数のパラーメータの型として
ポインターを定義した場合は、パラメータも戻り値として使用できることは既に述べた通りである。
しかしポインターをパラメータとして使用する利点は、これだけではない。

変数値をパラメータとして指定した場合は、関数毎に変数の分のメモリが割り振られることに
なるが、ポインターであれば作業用としてのメモリが割り振られることは発生しない。
例えばある変数として

char ebcbuf[1024] を定義してから、下位の呼び出し関数を

void toEBCDIC(char* ebcbuf) を使って、パラメータとして ebcbuf を渡すものとする。
さらに関数: toEBCDIC の中では、さらに下位の関数: void toKanji(char* ebcbuf); を
呼び出しているものとする。
ebcbuf が使用するメモリは最初の char ebcbuf[1024] だけである。
次々と下位の関数が数多く呼び出されても メモリ空間上で ebcbuf は唯一しか存在しない。
このように関数のパラメータとして変数値ではなく、ポインターを利用することによって
メモリを節約することができ、ポインタ制御であるのでアクセスも高速になる効果もある。
さらに呼び出される関数内ではどのような莫大な長さの変数にでも対応でき、
拡張性にも優れたソースを開発することができる。

ただしポインタを使用するからは文字列の最後は NULL で終結するように、いわゆる
NULL-STOP になる配慮は忘れてはならない。