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

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
bez

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

#1 投稿記事 by bez »

AB初心者です。

   sub test(a as DoublePtr)
    計算
   Endsub

   sub main()
    dim number(10) as double

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

main()

と上記の様に受け渡していますが、合っていますでしょうか。
他のプログラムのソースを参考にすると皆さんグローバルで定義されているので、わかりません。
教えてください。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 by konisi »

ローカル領域の配列のポインタがちゃんと機能するかはやってみないとわかりませんが、文法的にもあってるし、たぶん大丈夫だと思います。
test関数でアレックス(ArrayIndexOutOfBounds)を起こさないように注意してくださいね?すごく見つけにくいバグに成りえますから。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
THEREMIN
記事: 36
登録日時: 2007年2月11日(日) 01:52
お住まい: HYOGO pref.

#3 投稿記事 by THEREMIN »

コード: 全て選択

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
上記のループ内で何をしたいのかが分かりませんが、
この構文は永久ループを生む可能性があるのでやめた方が良いと思います。
bez

#4 投稿記事 by bez »

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

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

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

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


  
NoWest
記事: 264
登録日時: 2005年5月31日(火) 10:52
お住まい: 高知
連絡する:

#5 投稿記事 by NoWest »

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

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
ってな方法です。()

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

ありがとうございます。

#6 投稿記事 by Bez »

わかりました。
皆さんの素早い対応に感謝いたします。
計算の速度の問題については、
もう少し状況を克明にしてから、質問いたします。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#7 投稿記事 by konisi »

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

#同じような語源で、もっと一般的な単語だと「ぬるぽ」(NullPointerException)などがある。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
bez

ありがとうございます

#8 投稿記事 by bez »

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