ポインタのポインタ

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: ポインタのポインタ

Re: ポインタのポインタ

by 真紅 » 2005年8月08日(月) 23:22

結局こんな感じにしたら割と楽になりました。

コード: 全て選択


Class TEST
Public
    b As Long
End Class

Dim a As *TEST
Dim i As Long

a = New[ELM(4)] TEST
For i = 0 To 3
    a.b = 1
Next
Delete a

ただし数の変更が効かないのが難点ですね。

有難う御座いました。

Re: ポインタのポインタ

by イグトランス » 2005年8月07日(日) 18:10

配列へのポインタもクラスにすれば、と思ったら駄目でした。

コード: 全て選択

Class TestPtrArray
	Ptr As *VoidPtr
	Size As DWord
Public
	Function At(n As DWord) As *Test
		If n <= Size Then
			At = Ptr[n]
		End If
	End Function
/* 省略 */
End Class

Dim a As TestPtrArray
Dim i As Long

a.ArrayAlloc(3)
For i = 0 To 3
	a.ObjectAlloc(i)
		a.At(i)->b = 1 '「閉じカッコ ")" の後に不正な文字が含まれています」というエラー
'	a.ObjectFree(i)
Next
'a.ArrayFree()
オブジェクトと配列の開放はデストラクタが行ってくれるようにしました

ポインタのポインタ

by 真紅 » 2005年8月07日(日) 15:28

クラスオブジェクトのポインタの配列を扱いたいのですが、配列数が不定なので動的にメモリを確保したいのです。
静的であれば、

コード: 全て選択

Dim test[100] As *TEST
とすればうまくいくのですが…。

↓のような事をしようとしています。

コード: 全て選択


Class TEST
Public
    b As Long
End Class

Dim a As **TEST
Dim i As Long

a = malloc(4 * 4)
For i = 0 To 3
    a = New test()
    a->b = 1
    Delete a
Next
free(a)


要はポインタのポインタ型を使えないかということです。
ポインタ配列をDWord型配列にとっておき、必要なときに*TEST型変数にポインタを入れれば出来ることは出来るのですが、呼び出すたびに「*TEST型変数にポインタを入れる」という作業をしなければならないので、何かと効率が悪いです。

何かうまい手はないでしょうか?

ページトップ