其中形参数组 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
{
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,5);
printf("\nlast values of array b are:\n");
for(i=0;i<5;i++)
printf("%d ",b[i]);
}
本程序 nzp 函数形参数组 a 没有给出长度,由 n 动态确定该长度。在 main 函数中,函
数调用语句为 nzp(b,5),其中实参 5 将赋予形参 n 作为形参数组的长度。
d. 多维数组也可以作为函数的参数。在函数定义时对形参数组可以指定每一维的
长度,也可省去第一维的长度。因此,以下写法都是合法的。
int MA(int a[3][10])
或
int MA(int a[][10])。
8.8 局部变量和全局变量
谭浩强 C 语言程序设计 2001 年 5 月 1 日
在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结
束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。
这种变量有效xìng的范围称变量的作用域。不仅对于形参变量,C语言中所有的量都有自己的
作用域。变量说明的方式不同,其作用域也不同。C语言中的变量,按作用域范围可分为两
种,即局部变量和全局变量。
8.8.1 局部变量
局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内,
离开该函数后再使用这种变量是非法的。
例如:
int f1(int a) /*函数 f1*/
{
int b,c;
……
}
a,b,c 有效
int f2(int x) /*函数 f2*/
{
int y,z;