好的,我目前正在研究2D阵列,如果情况如此,我对二维阵列的尺寸感到困惑:
#define ROW 5
#define COL 10
typedef int arrint[COL]
并在主函数中声明为:
arrint a2D[ROW]
是2D阵列a2D[5][10]
还是a2D[10][5]
?
答案 0 :(得分:4)
由于你已经宣布arrint为int [COL == 10],而a2D是其中5个的数组,所以你最终得到了相当于:
a2d[i][j]
Typedef可以使用,但最好将2D数组类型定义为2D数组以避免混淆。在C中,二维数组作为行主要存储在内存中。阅读this帖子以获得详细解释。阵列排列在存储器中,使得第一行首先出现,然后是第二行,依此类推。每行由COL元素组成,因此定义它的方法是:
#include <stdio.h>
#define ROW 5
#define COL 10
typedef int A2D[ROW][COL];
int main(int argc, char** argv)
{
A2D a2d = {0};
int r,c;
a2d[1][2] = 12;
for(r=0; r<ROW; r++)
{
printf("Row %d: ", r);
for(c=0; c<COL; c++)
printf("%2d ", a2d[r][c]);
printf("\n");
}
}
然后要访问第i行第j列的元素,请使用:
Row 0: 0 0 0 0 0 0 0 0 0 0
Row 1: 0 0 12 0 0 0 0 0 0 0
Row 2: 0 0 0 0 0 0 0 0 0 0
Row 3: 0 0 0 0 0 0 0 0 0 0
Row 4: 0 0 0 0 0 0 0 0 0 0
以下是一个示例程序:
psql -v schema="$REDSHIFT_SCHEMA" -h "$REDSHIFT_HOSTNAME" -d "$REDSHIFT_DATABASE" -U "$REDSHIFT_USERNAME" -p "$REDSHIFT_PORT" -f "nulltest.sql" -v inputStartDateId=20170318 -v inputEndDateId=20170404
这会产生以下输出:
nulltest.sql