PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
13112 00/09/06 02:18:51 RE(8):PBでの外部関数によるポインタの使用 By ryochan
13111 00/09/05 18:34:36 PBでの外部関数によるポインタの使用(総括のコメント) By M.M
13107 00/09/05 17:45:23 RE(6):PBでの外部関数によるポインタの使用(7):API引数 By ryochan
13106 00/09/05 17:34:59 RE(5):PBでの外部関数によるポインタの使用(6):ref宣言 By ryochan
13105 00/09/05 17:33:57 RE(4):PBでの外部関数によるポインタの使用(5):string By ryochan
13104 00/09/05 17:33:11 RE(3):PBでの外部関数によるポインタの使用(4):string By ryochan
13103 00/09/05 17:31:00 RE(2):PBでの外部関数によるポインタの使用(3):構造体2 By ryochan
13102 00/09/05 17:30:14 RE(1):PBでの外部関数によるポインタの使用(2):構造体 By ryochan
13101 00/09/05 17:28:56 PBでの外部関数によるポインタの使用(1):ポインタの説明 By ryochan

カテゴリ:スクリプトの記述
日付:2000年09月05日 17:31 発信者:ryochan
題名:RE(2):PBでの外部関数によるポインタの使用(3):構造体2

***外部関数について構造体が引き渡される仕組みは?***

引数を構造体のポインタで宣言された関数を実行させるには
(これは(2)の説明によりPBでは必須)、
構造体のアドレス情報のみ渡されます。
メンバ情報なんてのは1分たりとも含まれません。
そして、呼ばれた関数はそのアドレス情報から
メンバ変数名について値を取得するのみです。
そしてもしその中で値を書き換えたら、当然
呼び出し元で確保された該当の変数と同じ
仮想メモリにある値を書き換えることになるので、
引き渡した変数値が結果的に変更されたことになります。

たとえ、そのメンバ変数が(文字列のみならず)ポインタ
であった場合ににしろ、
その値(アドレス情報)を読むことになります。
もしメンバ変数がポインタの場合は、
またその先のアドレスに格納されている変数にアクセスでき、
そこの値を変更させることもできます。
(注:const:API側で定数ポインタ宣言を除く。
これについてはあとで説明します。)
ただ、例えばAPI関数の中で文字列情報の操作がある場合、
Takaさんがおっしゃていたように、APIの実行前と、
実行後についてアドレス情報が変化しないところをみると、
文字操作処理でアドレスがインクリメント(ずらす)されるので、
操作処理が終わったあと、また元のアドレスに
戻す処理を行っていると思います。(これは推測です。)
(あと前回のテストでw_chart型と言ってましたが
char *の間違いでした。)

たったこれだけのことです。構造体のポインタとは
全体が変数みたいなものです(余計に解りにくいですか^^;)。
今まで構造体のメンバ変数がポインタであると
いうことに固執しすぎていました。おおぼけです。
(4)に続きます

付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS (記載なし)
DBMS (記載なし)
Browser (記載なし)

Server SoftWare

OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.