FreeBASIC マニュアルのトップに戻る

FreeBASIC ProPgReferences

目次→教本→プログラマーのための案内Using References←オリジナル・サイト

参照を使う 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

ポインターの代わりに 参照利用 を宣言する構文。

序文:
参照の宣言に使われるさまざまな構文は、すべて 'Byref' キーワードを使います。
ポインターは変数なので、その内容を変更することができ、同じポインターを使って異なる変数に連続してアクセスできます。
ただし、参照とそれが指定するオブジェクトとの関連付けは、宣言時に固定されます。

'Byref' キーワードは、参照によって宣言されている変数を示します。 3つの異なる文脈で使われます:
- 手続きの署名で、参照によって引数を渡す(byref パラメーター)。
- 関数の署名で、参照によって呼び出し元に変数を返す(byref return)。
- コードの本文で、参照変数(byref 変数)を定義します。
目次



1. 参照による手続きへのパラメーターの受け渡し(byref パラメーター)
注: 引数の項で、Byval キーワードをポインター名の前に指定すると、ポインターは(先に間接参照しなくても)直接 Byval 手続きパラメーターに渡すことができます。
このページの頭に戻る



2. 関数から参照で変数を返す(byref return)
特定の構文:
'=' 記号を使った代入式の左側では、解析のあいまいさを解決するために、関数が単一の引数を呼び出すとき、関数の結果(参照によって返される)を括弧で囲む必要があります。
fbc バージョン 0.90 から、初期化子と同様の '=' の代わりに、代入に '=>' を使うことができるので、(括弧なしの)解析のあいまいさを回避できます。
Declare Function transitbyref( ByRef _s As String ) ByRef As String

Dim As String s

s = "abcd"
Print s

'' the enclosing parentheses are required here.
( transitbyref( s ) ) = transitbyref( s ) & "efgh"
Print s

'' the enclosing parentheses are not required here.
transitbyref( s ) => transitbyref( s ) & "ijkl"
Print s

Sleep

Function transitbyref( ByRef _s As String ) ByRef As String
    '' This var-len string will transit by reference (input and output), no copy will be created.
    Return _s
End Function

出力:
abcd
abcdefgh
abcdefghijkl

注: identifier=Function=Return 命令文で、Byval キーワードがポインター名の前に指定されている場合、Byref 関数の戻りに対して、ポインターを直接(最初に間接参照しなくても)返すことができます。
このページの頭に戻る



3. コード内で参照変数を定義(byref 変数)
このページの頭に戻る


4. 参照とポインターの比較例
このページの頭に戻る


5. FreeBASIC で許可されている追加構文を使う、参照の使用法のハッキング
FB で、参照は、変数のアドレスを保持する、内部ポインターを介して、覆い(頭巾)の下で実装されます。

現在のところ、この内部ポインターへのアクセスは、ユーザーに対して、読み込み時に、参照変数に対しては書き込み時に、許可されています(他の多くの言語とは異なります):
- したがって、参照変数のシンボル名に適用される '@' 演算子を使って、参照される変数のアドレス(内部ポインターの値)を取得できます:
variable_address = @ref
- さらに、次のようにすると、参照変数を、互換性のある別の変数を参照するように再割り当て(内部ポインタの値を変更することにより)できます:
@ref = @other_variable
- 内部ポインタのアドレスも取得できます:
internal_pointer_address = @@ref

注:
- 参照変数は、"null" 参照に再初期化することもできます:
@ref = 0
- 参照変数は、"null" 参照として、直接宣言することもできます:
したがって、常に同じ参照シンボル名を使うことで、参照の純粋な構文と、その内部ポインターの構文を、混在させることができます。

参照
このページの頭に戻る
プログラマーのための案内に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2021-08-31 05:59:53
日本語翻訳:WATANABE Makoto、原文著作者:fxm

ホームページのトップに戻る

表示-非営利-継承