函数指针和二位数组
#include <stdio.h>#include <stdlib.h>
//两个求和函数的声明
int sumbyrow(int (*arr),int row,int sum);
int sumbycol(int (*arr),int col,int sum);
//函数定义在一定程度上有函数原型声明的作用.
//当函数定义在后,而调用在前时则必须要在调用语句之前声明该函数。
//若调用该函数在定义之后则可以不用单独给出声明。
int main()
{
int dataTable = { 0 };//定义数据表,初始化数据表
int i,j;
printf("录入数据中...");
for(i = 0;i < 5;i++)
{
for(j = 0;j < 4;j++)
dataTable = i * 4 + j;
}
printf("录入完毕\n");
int(*p) =dataTable; //定义数组指针,指向二维数组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; //定义求和方式,行/列,和
int(*q)(int,int,int);
//求和计算
printf("请输入求和方式(行:0/列:1):");
scanf("%d",&select);
printf("选择行/列:");
scanf("%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);
system("pause");
return 0;
}
//按行求和
int sumbyrow (int (*arr),int row,int sum)
{
int i = 0;
sum = 0;
for(i = 0;i < 4; i++)
sum += *(*(arr + row-1) + i);
return sum;
}
//按列求和
int sumbycol (int (*arr),int col,int sum)
{
int i = 0;
sum = 0;
for(i = 0;i < 5; i++)
sum += *(*(arr + i) + col-1);
return sum;
}
程序能够正常运行,但是我输入列数之后求出来的和是0,书上的代码是把sum当作地址传过去然后在求和函数的形参定义一个指针sum,但是我直接想把sum当作变量传过去却求和出来的结果是0 本帖最后由 jhq999 于 2022-12-6 23:31 编辑
实参不随形参改变而改变,实参和形参是两个变量,除了形参的初值是实参赋予的,它们之间没有联系
printf("求和结果为:%d\n",(*q)(dataTable,pos,sum));
页:
[1]