用C

时间:2015-10-02 01:42:16

标签: c arrays pointers

我有一个C程序,我想让指针进行计算而不是下标。这是代码:

/* rain */
#define TWLV 12
#define YRS 5 
main()

{
     static float rain [YRS][TWLV] = {
{10.2, 8.1, 6.8, 4.2, 2.1, 1.8, 0.2, 0.3, 1.1, 2.3, 6.1, 7.4},
{9.2, 9.8, 4.4, 3.3, 2.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 5.2},
{6.6, 5.5, 3.8, 2.8, 1.6, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 4.2},
{4.3, 4.3, 4.3, 3.0, 2.0, 1.0, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6},
{8.5, 8.2, 1.2, 1.6, 2.4, 0.0, 5.2, 0.9, 0.3, 0.9, 1.4, 7.2}
        };
/* initialize rainfall data for 1970-74 */
int year, month;
float subtot, total;

printf( " YEAR  RAINFALL (inches)\n");
for ( year = 0, total = 0; year < YRS; year++ )
{ /* for each year, sum rainfall for each month */
    for ( month = 0, subtot = 0; month < TWLV; month++)
        subtot += rain[year][month];
    printf("%5d, %15.1f\n", 1970 + year, subtot);
    total += subtot; /*total for all years */
}
printf("\nThe yearly average is %.1f inches. \n\n", total/YRS);
printf("MONTHLY AVERAGES:\n\n");
printf("Jan Feb Mar Apr May Jun Jul Aug Sep Oct");
printf("Nov Dec\n ");

for ( month = 0; month < TWLV; month++)
{ /* for each month, sum rainfall over years */
for ( year = 0, subtot =0; year < YRS; year++)
    subtot += rain[year][month];
printf("%4.1f ", subtot/YRS);
}
printf("\n");
}

我正在努力使用可互换使用的数组/指针,所以如果有人可以提供一个很好的解释。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您的数组类型为parse rollback -r v50 ,则可以使用float rain[YRS][TWLV]替换rain[i][j]的每个实例。这实际上不会给你任何东西,因为无论如何编译器都会这样做。但是,您也可以声明*(&rain[0][0] + (i*TWLV) + j),这可能会更快,因为它消除了循环内的指针算法。