熊族部落:C语言高手帮忙(能解答的都是高手中的高手)来证明一下吧

来源:百度文库 编辑:高考问答 时间:2024/05/03 01:14:53
请各位C语言高手帮忙详细分析一下下面这个程序.
#include<stdio.h>
void f(int b[])
{
int i=0;
while(b[i]<=10)
{
b[i]+=2;i++;
}
}
main()
{
int i,a[]={1,5,10,9,13,7};
f(a+1);
for(i=1;i<6;i++)
printf("%4d",a[i]);
}
运行结果为:1,7,12,11,13,7
请问f(a+1)是什么意思,a是数组名,加上一个1又表示什么?f函数中b[]又代表什么呢?
为什么1不加2而后面的加2?而13和7又不加2了呢?
请各位高手一定要详细分析喔!

f(a+1)是调用f这个函数,数组名是代表数组的首地址,a+1表示下一个元素,即题目中的5。b[]那个是形式参数,是用数组作为形式参数。所以调用时才会用a+1。因为它调用时是用的a+1,所以第一个数没有加2。因为当到13的时候,b[i]已经大于10了,所以下面的都不执行了。所以7和13都没有加
可能说的不是很明白 因为在电脑上很难说明

a+1就是将&a[1]传给f
b的值就是a+1
while (b[i]<=10) 又不是i<=10

1、f( a + 1) 的意思是 调用void f(int b[]) 函数,传入参数是 a + 1,
在这里,a + 1代表一个 int 类型的数组指针,它指向数组 a 的第二维。

因为传入的参数是指向 a 的第二维,所以 a 的第一维不加2,同时注意while的条件: while( b[i] <= 10 )
就是说当 b[i] > 10 的时候跳出循环。
所以当 b[3]即a[4]的时候,因为 b[3] = 13 所以在这里跳出了,b[4]就不用加2了。