secret662639 2022-09-14 08:38 采纳率: 90%
浏览 40
已结题

c中传入数组变量问题

//Arrays as function arguments
#include<stdio.h>
int SumOfElements(int A[])
{
int i,sum = 0;
int size = sizeof(A)/sizeof(A[0]);
for (i=0;i<size;i++)
{
sum+= A[i];
}
return sum;
}
int main()
{
int A[] = {1,2,3,4,5,};
int total = SumOfElements(A);
printf("Sum of elements = %d\n",total);
}

为什么编译出来sum of elements =1?

  • 写回答

5条回答 默认 最新

  • Nutkey 2022-09-14 09:21
    关注

    我们要在函数中使用数组长度时,可以在外部先用sizeof(arr)/sizeof(arr[0])求出数组长度,然后将他的长度作为一个参数传递进去。
    因为当数组作为函数参数传递的时候,sizeof()将数组看作指针,结果是指针的大小,而非整个数组所占内存
    因此改了一下代码就好了:

    #include<stdio.h>
    int SumOfElements(int A[],int &size)
    {
        int i,sum = 0;
        for (i=0;i<size;i++)
        {
            sum+= A[i];
        }
        return sum;
    }
    int main()
    {
        int A[] = {1,2,3,4,5,};
        int size = sizeof(A)/sizeof(A[0]);
        int total = SumOfElements(A,size);
        printf("Sum of elements = %d\n",total);
    }
    

    结果:

    img

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

报告相同问题?

问题事件

  • 系统已结题 9月24日
  • 已采纳回答 9月16日
  • 创建了问题 9月14日

悬赏问题

  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 Macbookpro 连接热点正常上网,连接不了Wi-Fi。
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程