/* 次题需要注意的是:这里由于a[10]和x[10]是共同享内存地址位的所以进行交换后a[10]的实际值也就发生了改变 */ /*程序作者:管宁 站点:www.cndev-lab.com 所有稿件均有版权,如要转载,请务必著名出处和作者*/
#include <stdio.h>
void main(void) {
void reversal(); static int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 建立一个数组并初始化 */ int i; for (i=0;i<10;i++) { printf("%d ",a); } printf("\n"); reversal(a,10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */
for (i=0;i<10;i++) { printf("%d ",a); } printf("\n");
}
void reversal(x,n) int *x,n; /* 定义x为指针变量 */ { int temp,*p,*i,*j; /* 这里需要注意的是temp用与交换的时候临时存储数据的 */ i = x; /* 利用指针变量i存储数组a的起始地址 */ p = x + ((n-1)/2); /* 计算最后一次循环的时候数组a的地址 */ j = x + n - 1; /* 计算数组a也就是a[9]的结束地址好用于交换 */ for (;i<=p;i++,j--) /* 利用循环和指针进行数组元素值的交换 */ { temp=*i; /* 用temp临时存储*i也就是循环中a实际的值 */ *i=*j; *j=temp; } }
/* 此例同样要注意到利用指针进行数组的操作同样改变了实际数组各元素的值 */ |