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

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

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

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

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

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,

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