关于指针的c语言问题,invalid operands to binary +(have ‘float✀ and ‘const float *✀

2025-04-06 05:38:07
推荐回答(2个)
回答1:

我给你改了第一个循环的东西,你看看有什么变化
#include
#define MONTHS 12
#define YEARS 5
int main (void)
{
// 把数组初始化为2000年到2004年的降水量数据
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;
float (*ptf)[MONTHS];

printf (" YEAR RAINFALL (inches) \n");
for (year = 0, total = 0; year < YEARS; year++)
{
for (month = 0, subtot = 0, ptf = rain; month < MONTHS; month++)
subtot += *(*(rain + year) + month);
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 Sep Oct ");
printf (" Nov Dec\n");

/*for (month = 0; month < MONTHS; month++)
{
for (year = 0, subtot = 0, ptf = rain; year < YEARS; year++)
subtot += *(rain + year * MONTHS + month);
printf ("%4.1f ", subtot / YEARS);
}
printf ("\n");*/
return 0;
}

有两点你要注意
(1)指针和二维数组怎么对应
(2)二维数组用指针怎么访问

回答2:

subtot += *(rain + year * MONTHS + month); 这里错了,应该是

subtot += rain[year] [month]; //这是二维数组!


subtot += *( *(rain + year) + month);

subtot += *( (float *)rain + year * MONTHS + month);