zhanjunlihai 2021-03-07 16:50 采纳率: 25%
浏览 32
已结题

函数的参数调用问题,谢谢

我只能理解输出结果的第一个值 6  后面的没明白什么意思,希望懂得人告诉我一下!谢谢

#include <stdio.h>
void f(int *q)

    int i=0;
    for(;i<5; i++) 
        (*q)++;
}
main( )

    int a[5]={1,2,3,4,5}, i;
    f(a);
    for(i=0;i<5; i++) 
        printf("%d,", a[i]);
}

程序输出结果: 6,2,3,4,5,

  • 写回答

3条回答 默认 最新

  • 幻灰龙 2021-03-07 17:36
    关注

    函数的参数 `f(int *p)` 接受数组指针,等价于 `f(int p[])`。传入 `f(a)` 这里传入的是数组 a 的指针。 数组 a 的指针则遵守数组指针的规则,指向数组的第一个元素。函数内部的循环,都执行了 `(*p)++` 这句代码,拆解开执行了两个步骤:

    • *p 指向了数组的第一个元素
    • (*p)++ 就是让数组的第一个元素自增

    循环了5次,于是数组的第一个元素就自增了5次,从1变成了6. 数组的其他元素都没变化。因此,main 函数里循环打印数组时,就分别打印出了变为 6 的第一个元素,以及什么都没变的其他元素:6 2 3 4 5 

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

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月24日

悬赏问题

  • ¥15 代码的修改,添加和运行完善
  • ¥15 krpano-场景分组和自定义地图分组
  • ¥15 lammps Gpu加速出错
  • ¥15 关于PLUS模型中kapaa值的问题
  • ¥15 关于博途V17进行仿真时无法建立连接问题
  • ¥15 机器学习教材中的例题询问
  • ¥15 求.net core 几款免费的pdf编辑器
  • ¥15 为什么安装HCL 和virtualbox之后没有找到VirtualBoxHost-OnlyNetWork?
  • ¥15 C# P/Invoke的效率问题
  • ¥20 thinkphp适配人大金仓问题