c语言:利用数组名作函数参数,实现双向数据传递

数组名作函数参数与基本数据类型作函数参数相比,具有完全不同的特点。c语言规定,数组名代表数组的首地址,所以,数组名作函数参数时,是将数组的首地址由实参传递给形参,即实参数组与形参数组会公用一个相同的数组首地址和一段相同的存储单元。所以,当形参数组元素发生变化时,实参数组元素的值也会随着发生改变。 书上有提到这些,可是没有例题,可否举个例子。

int x = 2
int y = F(x)

函数F里如果出现x=3,那么回归后主程序里x还是2,因为递给函数的只是个拷贝

如果
int x[] = {2,3}
int y = F(x)

这时递进去的是数组首地址,所以在函数里如果出现x[0]=1,那么主程序里的x也会变成{1,3}, 因为虽然函数拿到的x是一个拷贝,但因为它是地址,所以直接改变该地址的数据还是会有影响
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-28
拿一个例子说明:
int test(int a[])
{
a[0]=100;
return 0;
}
假如在main函数中,有
int a[10];
test(a);
执行完了以后,a[0]就变成100了;
第2个回答  推荐于2017-10-04
void Insert_sort(int array[],int n)
{
int i,j,temp;
for(i=0;i<n;i++)
{
//temp=array[i];
for(j=i+1;j<n;j++)
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
}
这是一个冒泡法排序的子函数,函数参数有两个:数组的首地址和需要排序的元素个数。
main函数为:
int main()
{
int n,i,array[N],k,*p;
p=array;
printf("Please input the number of need to sort(n):");
scanf ("%d",&n);
printf("\nPlease input n numbers:");
for( i=0;i<n;i++)
{
scanf("%d",p++);
}
printf("\nPlease insert the k:");
scanf("%d",&k);
p=array;
Insert_sort(p,k);
for(p=array,i=0;i<k;i++)
{
printf("%d ",*p);
p++;
}
system("PAUSE");
return 0;
}
在main函数中调用: Insert_sort(p,k);传递的是数组的首地址,但在子函数中,改变了数组的值,main最后输出这个数组发现里面的值也被修改了,这个应该能够说明:当形参数组元素发生变化时,实参数组元素的值也会随着发生改变。本回答被提问者采纳
相似回答