鱼C论坛

 找回密码
 立即注册
查看: 1860|回复: 1

[已解决]函数指针和二位数组

[复制链接]
发表于 2022-12-6 22:45:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <stdlib.h>

//两个求和函数的声明
int sumbyrow(int (*arr)[4],int row,int sum);
int sumbycol(int (*arr)[4],int col,int sum);
//函数定义在一定程度上有函数原型声明的作用.
//当函数定义在后,而调用在前时则必须要在调用语句之前声明该函数。
//若调用该函数在定义之后则可以不用单独给出声明。

int main()
{
        int dataTable[5][4] = { 0 };  //定义数据表,初始化数据表
        int i,j;
        printf("录入数据中...");
        for(i = 0;i < 5;i++)
        {
                for(j = 0;j < 4;j++)
                        dataTable [i][j] = i * 4 + j;
        }
        printf("录入完毕\n");
        int(*p)[4] =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)[4],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)[4],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
最佳答案
2022-12-6 23:28:25
本帖最后由 jhq999 于 2022-12-6 23:31 编辑

实参不随形参改变而改变,实参和形参是两个变量,除了形参的初值是实参赋予的,它们之间没有联系
printf("求和结果为:%d\n",(*q)(dataTable,pos,sum));
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-6 23:28:25 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jhq999 于 2022-12-6 23:31 编辑

实参不随形参改变而改变,实参和形参是两个变量,除了形参的初值是实参赋予的,它们之间没有联系
printf("求和结果为:%d\n",(*q)(dataTable,pos,sum));
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 09:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表