配列のポインタ受け渡しについて

返信する


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

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

トピックのレビュー
   

展開ビュー トピックのレビュー: 配列のポインタ受け渡しについて

ありがとうございます

by bez » 2007年3月01日(木) 02:45

丁寧に投稿有り難うございます。
とりあえず、無茶をせずにがんばります。

by konisi » 2007年2月28日(水) 01:30

アレックスの説明を省いてしまってすみませんでした。
JavaのArrayIndexOutOfBoundsException(配列領域外への参照による例外)が語源だったはず。
Javaでは例外を投げてくれるし、受け取れるんですが、AB4では実装されていません。バグ潰しもまだまだ大変だ、という事です。

#同じような語源で、もっと一般的な単語だと「ぬるぽ」(NullPointerException)などがある。

ありがとうございます。

by Bez » 2007年2月27日(火) 21:59

わかりました。
皆さんの素早い対応に感謝いたします。
計算の速度の問題については、
もう少し状況を克明にしてから、質問いたします。

by NoWest » 2007年2月27日(火) 21:52

> 早速の返信ありがとうございます。
>
> 要は配列の中身を自由に入れ替えを行うサブルーチンを作りたいのです。
>
>   アレックスの意味がわかりません(すみません)。。。
>   入れ替えを行っていると計算の処理がだんだん遅くなる気がします。これが、アレックスなのでしょうか???
>
>   また、参照渡しという方法を教えていただけませんでしょうか
アレックス??私も聞いたことないんですが、横の英語を訳せば何と無く意味はイメージできると思います。

Array 配列
Index インデックス
Out Of Bounds 領域外

アレイ+インデックス=アレ+クス=アレックス??

配列要素が100あったとして101や-1はABではエラーになるということだと思います。
※エラーでも警告が出ないこともありますので気付きにくい。。。

処理を繰り返し行って、計算速度が遅くなるというのはこれとは別の問題であったり、ABのバグである可能性もあるので現在使用しているABのバージョンなどを記入するなどすると答える方もやり易いかと。。。


参照渡しというのは

コード: 全て選択

Sub test(ByRef a[] As Double) 
    '計算
End Sub 

Sub main() 
    Dim number(10) As Double 
    test(number)
End Sub
ってな方法です。()

ポインタを使った方法とほとんど違いはありません。

by bez » 2007年2月27日(火) 21:27

早速の返信ありがとうございます。

要は配列の中身を自由に入れ替えを行うサブルーチンを作りたいのです。

  アレックスの意味がわかりません(すみません)。。。
  入れ替えを行っていると計算の処理がだんだん遅くなる気がします。これが、アレックスなのでしょうか???

  また、参照渡しという方法を教えていただけませんでしょうか


  

by THEREMIN » 2007年2月27日(火) 01:49

コード: 全て選択

Sub test(Byref a As Double)
	< 計算 >
End Sub

Sub main()
	Dim number(10) As Double
	Dim i As Word
	For i=0 To 10
		test(number(i))
		< 配列内容の表示 >
	Next i
	< ファイル出力 >
End Sub
test()関数にnumber()配列を一つずつ渡して計算をさせるなら、
For~Nextループで配列を一つずつ渡したほうがよいと思います。
配列のポインタが計算に必要なのなら別ですが。
というか、ポインタ渡しじゃなくても参照渡しでいけるんじゃ・・・

まあそれはそれとして、
while 1
wend
上記のループ内で何をしたいのかが分かりませんが、
この構文は永久ループを生む可能性があるのでやめた方が良いと思います。

by konisi » 2007年2月26日(月) 20:37

ローカル領域の配列のポインタがちゃんと機能するかはやってみないとわかりませんが、文法的にもあってるし、たぶん大丈夫だと思います。
test関数でアレックス(ArrayIndexOutOfBounds)を起こさないように注意してくださいね?すごく見つけにくいバグに成りえますから。

配列のポインタ受け渡しについて

by bez » 2007年2月26日(月) 20:18

AB初心者です。

   sub test(a as DoublePtr)
    計算
   Endsub

   sub main()
    dim number(10) as double

    while 1
    test(number)
    配列内容の表示とファイル出力
    wend
   Endsub

main()

と上記の様に受け渡していますが、合っていますでしょうか。
他のプログラムのソースを参考にすると皆さんグローバルで定義されているので、わかりません。
教えてください。

ページトップ