靳润昭C语言教程讲义 2001年2月17日 if(a[i]<0)a[i]=0; printf(%d", alil main int b[5],i: printf( \input 5 numbers: \n") for(i=0;i<5;i++) scanf(%d",&b[i]) printf( initial values of array b are: \n") for(i=0;i<5;i++) printf(%d", b[il printf( \nlast values of array b are: \n") for(i=0;i<5;i++) printf(%d"b[il) 本程序与例8.9程序比,nzp函数的形参数组长度改为8,函数体中,for语句的循环 条件也改为i<8。因此,形参数组a和实参数组b的长度不一致。编译能够通过,但从结果 看,数组a的元素a[5],a[6],a[7]显然是无意义的 C,在函数形参表中,允许不给出形参数组的长度,或用一个变量来表示数组元素 的个数。 例如,可以写为 void nzp ( int al) 或写为 void nzp(int a[, int n) 其中形参数组a没有给出长度,而由n值动态地表示数组的长度。n的值由主 调函数的实参进行传送。 由此,例8.10又可改为例8.11的形式。 【例8.11】 id nzp (int a[, int n) printf( \nvalues of array a are: \n") for (i=0; i<n: i++) if(a[i]<0)a[i]=0 printf("%d" alil 第16页靳润昭 C 语言教程讲义 2001 年 2 月 17 日 第16页 { if(a[i]<0)a[i]=0; printf("%d ",a[i]); } } main() { int b[5],i; printf("\ninput 5 numbers:\n"); for(i=0;i<5;i++) scanf("%d",&b[i]); printf("initial values of array b are:\n"); for(i=0;i<5;i++) printf("%d ",b[i]); nzp(b); printf("\nlast values of array b are:\n"); for(i=0;i<5;i++) printf("%d ",b[i]); } 本程序与例 8.9 程序比,nzp 函数的形参数组长度改为 8,函数体中,for 语句的循环 条件也改为 i<8。因此,形参数组 a 和实参数组 b 的长度不一致。编译能够通过,但从结果 看,数组 a 的元素 a[5],a[6],a[7]显然是无意义的。 c. 在函数形参表中,允许不给出形参数组的长度,或用一个变量来表示数组元素 的个数。 例如,可以写为: void nzp(int a[]) 或写为 void nzp(int a[],int n) 其中形参数组 a 没有给出长度,而由 n 值动态地表示数组的长度。n 的值由主 调函数的实参进行传送。 由此,例 8.10 又可改为例 8.11 的形式。 【例 8.11】 void nzp(int a[],int n) { int i; printf("\nvalues of array a are:\n"); for(i=0;i<n;i++) { if(a[i]<0) a[i]=0; printf("%d ",a[i]); } }