#include<stdio.h>
void sumbyrow(int(*arr)[5], int row, int* sum);
void sumbycol(int(*arr)[4], int col, int* sum);
int main()
{
int datatable[5][4] = { 0 };
int i, j;
printf("录入数据中...\n");
for (i = 0; i < 5; i++)
{
for (j = 0; j < 4; j++)
datatable[i][j] = i * 4 + j;
}
printf("录入完毕\n");
int(*p)[4] = datatable;
printf("输入数据:\n");
for (i = 0; i < 5; i++)
{
for (j = 0; j < 4; j++)
printf("\t%d", *(*(p + i) + j));
printf("\n");
}
int select, pos, sum;
void (*q)();
printf("请输入求和方式(行:0/列:1):");
scanf_s("%d", &select);
printf("选择行/列");
scanf_s("%d", &pos);
if(select == 0)
{
printf("按行求和,第%d行数据", pos);
q = sumbyrow;
}
else if (select == 1)
{
printf("按列求和,第%d列数据", pos);
q = sumbycol;
}
(*q)(datatable, pos, &sum);
printf("求和结果为:%d\n", sum);
return 0;
}
void sumbyrow(int(*arr)[5], int row, int* sum)
{
int i = 0;
*sum = 0;
for (i = 0; i < 5; i++)
*sum += *(*(arr + row - 1) + i);
}
void sumbycol(int(*arr)[4], int col, int* sum)
{
int i = 0 ,j;
*sum = 0;
for (i = 0; i < 4; i++)
*sum += *(*(arr + i) + col - 1);
}
不能将 "void (*)(int (*arr)[5], int row, int *sum)" 类型的值分配到 "void (*)()" 类型的实体 34行和41行