将值赋给指针2d数组的指针

时间:2016-01-13 20:32:17

标签: c arrays memory allocation calloc

我相信我的声明不正确。我有一个2D数组和一个3D数组。因为我将值0 - 或NULL分配给其中一个数组,所以我会发生故障。我知道这是在尝试将地址NULL分配给无效的指针。

也许我需要在分配之前取消引用数组?如果是这样,我该怎么做?如果没有,我如何声明数组?

double **WeightIH = calloc(51*20,sizeof(double **));
double ***Input = calloc(51*40, sizeof(double ***));
DeltaWeightIH[i][j] = 0.0 ;

3 个答案:

答案 0 :(得分:0)

定义5x6x7矩阵的简单方法希望它有所帮助。

float ***array3D;
array3D = malloc(5 * sizeof(float**));
for ( int i = 0; i < 5; ++i) {
    array3D[i] = malloc(6 * sizeof(float*));
    for ( int j = 0; j < 6; ++j) {
         array3D[i][j] = calloc( 7, sizeof(float));
         for ( int k = 0; k < 7; ++k ) 
             array3D[i][j][k] = 1.0;  
    }
}

在定义指针数组时我不会使用calloc,因为你在同一个循环中立即填充它们。 不要忘记自由,它会很快地吃掉你的记忆。

答案 1 :(得分:0)

最简单的方法是使用for循环。就像下面的例子一样

SELECT  @ColumnNames = COALESCE(@ColumnNames + ',','') + QUOTENAME([Measure1])
FROM    (SELECT DISTINCT
                CASE WHEN [measure1] LIKE '%lower%' THEN 'Lower'
                     WHEN [measure1] LIKE '%upper%' THEN 'Upper'
                     WHEN [measure1] LIKE '%Days%' THEN 'Days'
                     WHEN [measure1] LIKE '%Occur%' THEN 'Occurrences'
                     WHEN [measure1] LIKE '%Pred%' THEN 'Predicted'
                     WHEN [measure1] LIKE '%Ratio%' THEN 'Ratio'
                END AS [Measure1]
         FROM   [dbo].[Table1]
        ) t
WHERE [Measure1] IS NOT NULL

答案 2 :(得分:0)

从您的问题中不清楚连续阵列是否满足您的要求;但如果确实如此,那么你可以写得更简单:

double (*a)[20] = malloc( 51 * sizeof *a );

double (*b)[20][30] = malloc( 10 * sizeof *b );

最里面的尺寸位于右侧,其他尺寸位于左侧。

如果确实需要锯齿状数组,则需要为每一行编写单独的分配。