当前位置:文档之家› 经验技巧7-2 数组名作为函数形参

经验技巧7-2 数组名作为函数形参

经验技巧7-2 数组名作为函数形参
数组名代表数组的起始地址,是一个指针常量。

因此,数组名不能作自增自减的运算,也不能在赋值语句中作左值。

【示例1】
#define N 8
int main()
{
int i, a[N];
for( i= 0; i<N; i++)
scanf("%d",a++);
return 0;
}
【示例1】中,企图通过对a的改变使指针下移,指向欲输入数据的数组元素。

它的错误在于不了解数组名代表的是数组首地址,是一个地址常量,而地址常量的值是不能改变的。

但如果数组名作为函数的形参,则它退化为一个指针变量。

此时,数组名可以进行自增自减的运算,也可以在赋值语句中作左值。

【示例2】
#define N 8
void Input(int b[])
{
int i;
for( i= 0; i<N; i++)
scanf("%d",b++);
}
int main()
{
int a[N];
Input(a);
return 0;
}
Input函数的形参数组b实际是一个指向实参数组a的指针变量,通过函数调用Input(a)的参数传递,使b指向数组元素a[0],通过b++的操作使指针b下移,依次指向数组元素a[1],a[2],...,a[N-1],从而达到给实参数组a的各元素
输入数据的目的。

Input函数也可改写成:void Input(int *b)
{
int i;
for( i= 0; i<N; i++)
scanf("%d",b++);
}
与原Input函数的效果完全相同。

相关主题