59816


要素数N個の配列の宣言と参照方法についての質問です。

## 質問１

開始インデックスを0とするのがよいのか、1とするのが良いのか

## 質問２

要素数Nの配列が必要なとき、宣言時にN-1を指定するのか、それとも別のやり方があるのか

* * *

VB.NET初心者です。  
配列の範囲外アクセスの挙動を調べる勉強用のプログラムを書いていて、インデックスが0から10までの要素にアクセスしてみました。

インデックス0と10ではエラーとならず、11でエラーとなりました。  
インデックス10でエラーとなることを想定していたのですが、エラーとなりませんでした。  
要素数を調べてみると11でした。想定は10なのでこれも意外でした。

【ソースコード】

[code]

        Dim idx
        Dim a(10)
        idx = 0
        a(idx) = idx
        Console.WriteLine("a(" & idx & ")= " & a(idx))
        idx = 10
        a(idx) = idx
        Console.WriteLine("a(" & idx & ")= " & a(idx))
        idx = 11
        a(idx) = idx
        Console.WriteLine("a(" & idx & ")= " & a(idx))
    
[/code]

【実行結果】

[code]

    a(0)= 0
    a(10)= 10
    Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at ConsoleApp1.Program.Main(String[] args) in 省略\Program.vb:line 63
    
[/code]

10を指定して配列を宣言すると要素数が11個の配列ができます。

【ソースコード】

[code]

    Dim a(10)
    Console.WriteLine("a.length = [" & a.Length & "]")
    
[/code]

【実行結果】

[code]

    a.length = [11]
    
[/code]


CC BY-SA 4.0
2019-10-13T02:38:18.047
59678
2019-10-20T00:01:31.110
35558
question
vb.net
VB.NETでN個の要素からなる配列を作成する方法と参照方法を教えてください


自身による回答です。

方法１ 最大のインデックス番号を指定して配列を宣言する。  
配列の要素数より少ない値で宣言するため、直観的ではありません。

[code]

    Dim a(9) As Integer
    
[/code]

方法２ インデックスの範囲を指定して配列を宣言する。  
開始インデックスに0以外の値を指定できるような印象を与える構文です。

[code]

    Dim a(0 To 9) As Integer
    
[/code]

次の宣言はエラーが発生します。  
Dim a(1 To 10) As Integer  
error BC32059: 配列の下限に指定できるのは '0' のみです。

方法３ 配列であることを宣言し、大きさは後から指定できます。  
配列を他の関数(やサブルーチン)に(ByRefで)渡して、その関数で要素数を変更することもできます。

[code]

    Dim a() As Integer
    ReDim a(9)
    
[/code]


CC BY-SA 4.0
2019-10-20T00:01:31.110
59816
2019-10-20T00:01:31.110
35558
59678
answer