PTAR1
zhanjunlihai
采纳率16.7%
2021-03-07 16:50

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

已采纳

我只能理解输出结果的第一个值 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条回答

  • huanhuilong 幻灰龙 1月前

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

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

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

    点赞 评论 复制链接分享
  • cson20193212002 Basesson 1月前
    void f(int *q)                //实现结果将指针q指向的值+5
    { 
        int i=0;
        for(;i<5; i++)            //循环五次
            (*q)++;               //将指针q指向的值+1
    }
    main( )
    { 
        int a[5]={1,2,3,4,5}, i;  
        f(a);                     //将a[0]+5
        for(i=0;i<5; i++)
            printf("%d,", a[i]);  //分别打印a[0],a[1],a[2],a[3],a[4]
    }

    因为a[0]通过f函数+5,变成6,其他不变所以a[]现在是等于{6,2,3,4,5},所以打印出来是6,2,3,4,5,

    点赞 1 评论 复制链接分享
  • SoftwareTeacher SoftwareTeacher 1月前

    请你在这句话          (*q)++;     后面打印 (*q)的值, 就可以看到变化了。 

    点赞 评论 复制链接分享

为你推荐