求助,关于指针和数组
cpp第十章数组与指针 编程练习 1关于指针不明白..
for(pfy = pfm, subtot = 0; pfy < rain + YEARS; pfy++)
这样写编译能通过,但是会给个警告
如果我写成
*pfy = pfm , 就会报错
pfy是 12个float长度的指针, *pfy不是指向rain[0][0] 的吗?
程序代码:
/*程序目标: * 计算出年降水总量 , 年降水平均量 , 月降水平均量 . */ #include <stdio.h> #define MONTHS 12 #define YEARS 5 int main(void) { const float rain[YEARS][MONTHS] = { {4.3,4.3,4.3,3.0,2.0,1.2,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.3}, {9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4}, {7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2}, {7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2}}; int year, month; float subtot, total; const float (*pfy)[12], * pfm; printf(" YEAR RAINFALL (inches)\n"); for(pfy = rain, year = 0, total = 0; pfy < rain + YEARS; year++, pfy++) { for(subtot = 0, pfm = *pfy; pfm < *pfy + MONTHS; pfm++) /*这里的 pfm = *pfy 和下面的 *pfy = pfm 有什么区别??*/ subtot += *pfm; printf("%5d %15.1f\n", 2000 + year, subtot); total += subtot; } printf("\nThe yearly average is %.1f inches.\n\n", total/YEARS); printf("MONTHLY AVERAGES:\n\n"); printf(" Jan Feb Mar Apr May Jun Jul Aug "); printf("Sep Oct Nov Dec\n"); for(pfm = rain[0]; pfm < rain[0] + MONTHS; pfm++) { for(pfy = pfm, subtot = 0; pfy < rain + YEARS; pfy++) /* 这样写会有警告,但程序可以运行..如果写成 *pfy = pfm 就会报错 ,不明白*/ subtot += **pfy; printf("%4.1f ", subtot/YEARS); } printf("\n"); return 0; }