qq_20614949 2023-03-17 09:19 采纳率: 46.2%
浏览 14
已结题

为什么主函数中SUM=..调用函数的时候数组a传递不了到子函数中

#include<iostream>
using namespace std;
int listSum( const int(*p)[4],int n);
int main()
{
    int m,i,j,SUM,q;
     int a[i][4]; 
     int (*p)=a[i];
    cout<<"请输入数的总个数(4的倍数)"<<endl;
    cin>>m;
    cout<<"请输入这些数的具体值"<<endl;
    for(i=0;i<m/4;i++){
        for(j=0;j<4;j++){
        cin>>a[i][j];
        }        
    }     
    cout<<"将这些数变为四列的二维数组为"<<endl;
    for(i=0;i<m/4;i++){
        for(j=0;j<4;j++){
            cout<<a[i][j]<<'\t';
        }
        cout<<endl;
    }
    q=m/4;
    SUM=listSum(a[q][4],q);
    cout<<"这些数的和为"<<SUM;
}
int listSum(  int(*p)[4],int n)
{
    int sum=0;
    int i,j;
    for(i=0;i<n;i++){
        for(j=0;j<4;j++){
            sum+=*(p+i)[j];
            
        }
    }
    
}

为什么主函数中SUM=..调用函数的时候数组a传递不了到子函数中
``
  • 写回答

4条回答 默认 最新

  • 「已注销」 2023-03-17 09:21
    关注

    参考GPT和自己的思路:

    你的代码存在一些问题。首先,在第6行的时候,你给定了变量i的值,但是并没有给定其初始值,这会导致数组a没有被正确地初始化。其次,在第8行你使用了a[i],但是在这一行之前根本没有给i赋值,这会导致指针p指向错误的地址,也就是数组a的一个随机位置。在第25行中,你传递了一个空指针给listSum函数,因为a[q][4]实际上是a数组中一个不存在的位置。因此,你需要做一些更改来修复这些问题。

    以下是你需要做出的更改:

    1. 在第6行声明变量i之前,先通过cin输入其初始值。

    2. 在第7行中,将数组a的声明移动到i的声明之后,并将数组大小更改为m/4 x 4。

    3. 在第8行中,将a[i]更改为&a[0],因为一维数组在传递给函数时会自动转换为指向该数组首元素的指针。

    4. 在第25行中,将a[q][4]更改为&a[0]。

    下面是更改后的代码:

    1. #include<iostream>
    2. using namespace std;
    3. int listSum( const int(*p)[4],int n);
    4. int main()
    5. {
    6. int m,i=0,j,SUM,q;
    7. cout<<"请输入数的总个数(4的倍数)"<<endl;
    8. cin>>m;
    9. int a[m/4][4];
    10. int (*p)=&a[0];
    11. cout<<"请输入这些数的具体值"<<endl;
    12. for(i=0;i<m/4;i++){
    13. for(j=0;j<4;j++){
    14. cin>>a[i][j];
    15. }
    16. }
    17. cout<<"将这些数变为四列的二维数组为"<<endl;
    18. for(i=0;i<m/4;i++){
    19. for(j=0;j<4;j++){
    20. cout<<a[i][j]<<'\t';
    21. }
    22. cout<<endl;
    23. }
    24. q=m/4;
    25. SUM=listSum(&a[0],q);
    26. cout<<"这些数的和为"<<SUM;
    27. }
    28. int listSum( int(*p)[4],int n)
    29. {
    30. int sum=0;
    31. int i,j;
    32. for(i=0;i<n;i++){
    33. for(j=0;j<4;j++){
    34. sum+=*(p[i]+j);
    35. 
    36. }
    37. }
    38. return sum;
    39. }
    

    在更改后的代码中,数组a被正确地传递给了listSum函数,并且程序能够正确地计算出输入数组的和。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 创建了问题 3月17日

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?