凡尘若诗 2024-03-10 22:37 采纳率: 100%
浏览 8
已结题

关于#c语言#的问题:左边那个传地址输入数组的值,右边那个在主函数直接输入数组的值,但是右边主函数看着没问题,却不能输出数组第二行以后的值,见第二张图(相关搜索:二维数组|函数参数|输出二维数组)

img

img

    Microsoft Visual Studio调试                                                                                                                                                         十
 Howmany students?2
 Howmanycourses?2
 Input scores
 14
 45
 78
 Result:
 14         45         59        29.5
 -858993460                -858993460                 -1717986926                -858993472.0
 D:\visualstudiostudyproject\demo_1\x64\Debug\demo_e1.exe(进程992)已退出,代码为.
 按任意键关闭此窗口...
                                                                                                                                     中中行                  22:24
                                                                                                                                                    2024/3/1

左边那个传地址输入数组的值,右边那个在主函数直接输入数组的值

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-03-12 05:09
    关注

    【相关推荐】



    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7473292
    • 这篇博客也不错, 你可以看下利用指针编写程序,定义一个3行3列的二维数组,并在程序中对其进行赋值,不需要从键盘输入,数组元素的类型不限,输出该二维数组以及各行的均值(保留至少两位小数),各行的均值可直接输出,也可存储于一维数组中
    • 您还可以看一下 李月喜老师的企业微信开发自建内部应用开发篇课程中的 通讯录管理,获取部门列表部门成员及成员详情小节, 巩固相关知识点
    • 除此之外, 这篇博客: 用函数指针,数组指针和二维数组完成数据表的输入输出问题中的 用函数指针,数组指针和二维数组完成数据表的输入输出问题 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

       

      问题描述:     

      工作生活中常常需要处理一些数据,小到个人的日常开支,大到公司的整体运营,为了使数据处理的效率更高,操作更加方便,常常使用各式各样的数据表来存储这些数据。例如使用一张表格记录全班学生成绩,针对该表格,可以执行基于行的操作,求出某个学生的总成绩,也可以执行基于列的操作,求得某个科目的成绩,进而得出本班学生某科目的平均分。

      思路分析:

      1. 创建一个二维数组
      2. 定义一个函数指针,通过它调用输入函数,传入二维数组的首地址,从而实现数据表的输入
      3. 通过数组指针循环输出数据表的元素
      4. 定义另外一个数组指针,利用分支结构选择将行求和函数或将列求和函数的存储空间首地址赋给这个数组指针
      5. 通过第二个数组指针调用行或列函数,并输出求和结果   

       

      代码明细:

      #include<stdio.h>
      int scan(int (*s)[5],int n);                     //定义输入函数scan;
      void sumbyrow(int (*arr)[5],int row,int *sum);    //定义行求和函数sumbyrow;
      void sumbycol(int (*arr)[5],int col,int *sum);     //定义列求和函数sumbycol;
      int main()
      {
      	int datetable[5][5];                            //定义数据表datetable;
      
      int n;
      	printf("请输入行数\n");
      	scanf("%d",&n);
      	int (*x)(int (*)[5],int );                      //定义函数指针;
      	x=scan;                                             //把函数scan的数据存储空间的入口赋给函数指针x;
      	(*x)(datetable,n);                               //通过函数指针调用scan函数;
      		int (*p)[5]=datetable;                         //定义数组指针p,并把datatable[5][5]的第一个元素的地址付给p;
      		printf("输出数据表\n");
      		for( int i=0;i<5;i++)
      		{	for(int j=0;j<5;j++)
      				printf("%d ",*(*(p+i)+j));            //利用数组指针实现对数据表的输出;
      		printf("\n");}
      			int select,pos,sum;
      			  void(*q)(int (*)[5],int ,int *);    //定义函数指针q;
      			  printf("请输入求和方式(行1,列2)\n");
      
      input:                                            //goto函数的标志;
      			  scanf("%d",&select); 
      			  
      			  if(select==1)               //如果输入的值为1,把sumbyrow函数的首地址赋给q;
      
      			  {	
      				 q=sumbyrow;                 
      			  }
      			  else  if(select==2)             //如果输入的值为2,把sumbyrow函数的首地址赋给q;
      			  {
      				  q=sumbycol;                 
      			  }
      			  else                           //如果都不满足,使用goto语句跳转到标记所在语句,实现重新输入;
      			  {
      				  printf("错误,请重新输入\n");   
      				  goto input;
      			  }
      	printf("请输入行数或列数 :\n");
      			  scanf("%d",&pos);
      (*q)(datetable,pos,&sum);                    //通过函数指针q调用sumbyrow/sumbycol函数;
      return 0;
      
      }
      
      
      void sumbyrow(int (*arr)[5],int row,int *sum)          //sumbyrow函数定义;
      {
      	*sum=0;
      	for(int i=0;i<5;i++)
      	*sum=*sum+(*(*(arr+row-1)+i));
      	 printf("第%d 行的和为%d\n",row,*sum);
      }
      void sumbycol(int (*arr)[5],int col,int *sum)         //sumbycol函数定义;
      {
      	*sum=0;
      	for(int j=0;j<5;j++)
      		*sum=*sum+(*(*(arr+j)+col-1));
      	printf("第%d 列的和为%d\n",col,*sum);
      }
      
      
      int scan(int (*s)[5],int n)                         //scan函数定义;
      {
      	for(int i=0;i<n;i++)
      		for(int j=0;j<5;j++)
      		scanf("%d",*(s+i)+j);
      return 0;
      }

      运行结果:

       


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 已采纳回答 3月21日
  • 修改了问题 3月10日
  • 修改了问题 3月10日
  • 展开全部

悬赏问题

  • ¥100 网页游戏在本地页面修改游戏结果
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数