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 (記載なし)
Copyright © 2013 Power Future Co., Ltd.