代码之家  ›  专栏  ›  技术社区  ›  Freakishly

如何使用运行时确定的维度初始化C数组?

  •  2
  • Freakishly  · 技术社区  · 14 年前

    谢谢你的帮忙。

    我有一个二维C阵列,它有50个维度。另一个维度取决于某个数据库中某个地方的行数,并在运行时确定。如何初始化这样的数组?

    目前,我对一行的初始化看起来是这样的,但我确信有更好的方法,更有效地进行初始化:)

    temp = new Double[50,1] { {0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},
                                    {0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},
                                    {0},{0},{0},{0},{0},{0},{0},{0},{0},{0}};
    
    4 回复  |  直到 14 年前
        1
  •  5
  •   Toby    14 年前

    只需在运行时使用第二个维度的整数变量初始化数组。

    double[,] = new double[50, v];
    

    C将自动将所有双精度初始化为零,因此在特定情况下,不需要显式初始化值。

        2
  •  5
  •   Community CDub    8 年前

    AS Toby said 你不需要明确地设定 double 从开始值为零 default(double) == 0.0 .

    但是,如果要将数组的所有成员初始化为数组类型的默认值以外的某个值,则可以始终这样做:

    static T[,] GetInitializedArray<T>(int width, int height, T value)
    {
        var array = new T[width, height];
        for (int x = 0; x < width; ++x)
        {
            for (int y = 0; y < height; ++y)
            {
                array[x, y] = value;
            }
        }
    
        return array;
    }
    

    这将允许您编写这样的代码:

    double[,] temp = GetInitializedArray(50, 1, 0.0);
    
        3
  •  1
  •   jethro    14 年前

    如果数组的第二个dim可以改变,请使用 jagged array

    double [][] temp = new double [50][]; 
    

    当你知道你设置的数组的尺寸时。

    temp[index] = new double[length];
    

    如果它总是矩形大小,请使用以下构造

    double [,] temp = new double[50, length];
    
        4
  •  1
  •   Neil Knight    14 年前
    double[,] temp = new double[50,1];
    
    double[][] temp = new double[50][];
    

    看一看 here 有关数组的详细信息。