qq_20614949 2023-03-17 09:19 采纳率: 30.4%
浏览 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 python中aiohttp.client_exceptions.ContentTypeError
  • ¥30 DeepLung肺结节检测生成最大froc值对应的epoch报错
  • ¥50 滴滴出行模拟系统,模拟叫车、出行过程等过程
  • ¥15 信号发生器如何将频率调大,步尽值改成10
  • ¥15 keil 5 编程智能家具,风扇台灯开关,人体感应等
  • ¥100 找一名渗透方面的专家
  • ¥20 使用Matlab APP设计一个插补小程序
  • ¥15 evo评估时曲线出现问题
  • ¥15 eNSP拓扑图配置实验
  • ¥20 有没有兄弟会替换fmod studio的.bank文件内的音效?