将数组中的元素逆序存放

题目:输入n个整数存放在数组中,通过函数的方法将该数组中的元素逆序存放。

#include 
void reverse(int b[],int n);//函数声明与函数定义中的第一行相同,并以分号结束
int main()
{ int a[30],i,n;
  printf("Enter n:");
  scanf("%d",&n);//屏幕上会显示出输入的数字
  printf("Enter %d integers:",n);//先输入才可输出包含该输入的语句
  for(i=0;i<=n-1;i++)
    scanf("%d",&a[i]);
  reverse(a,n);//见注释3
  for(i=0;i<=n-1;i++)
    printf("%3d",a[i]);//
  printf("\naddress of a[]:%p\n",a);//实参数组a的首地址
  return 0;
}
void reverse(int b[],int n)//见注释3
{ int i,j,t;
  for(i=0,j=n-1;i<j;i++,j--)
  { t=b[i];
    b[i]=b[j];
    b[j]=t;
  }
  printf("address of b[]:%p\n",b);//形参数组b的首地址,b=&b[0]
}

注:1.在C语言中,也可以用数组名作为函数的参数,由于数组名代表数组的首地址,实参只是将数组的首地址传递给所对应的形参,所以形参应为数组名或指针。

2.用数组名作为函数实参时,不是把实参中数组元素的值传递给形参,而是把实参数组中第一个元素(下标为0)的地址传递形参数组,这样两个数组共享同一段内存单元。这种函数参数传递方式称为按地址传递方式(或称为按名传递),形参值的改变将直接影响实参值。

3.语句"reverse(a,n);“中,实参数组名a与&a[0]是相同的,都是数组的首地址,因此也可以写成"reverse(&a[0],n);”。函数定义语句"void reverse(int b[],int n)"中,数组名b后跟一对空的方括号,没有指定数组大小,这是因为C语言编译系统对形参数组大小不做检查,只是将实参数组的首元素地址传递给形参。

你可能感兴趣的:(函数)