挑战30天C 入门极限:在c_c 中利用数组名和指针进行排序的例子

文章作者 100test 发表时间 2007:03:10 17:08:37
来源 100Test.Com百考试题网


以下两个例子要非常注意,函数传递的不是数组中数组元素的真实值而是数组在内存中的实际地址!

/*程序作者:管宁
站点:www.cndev-lab.com
所有稿件均有版权,如要转载,请务必著名出处和作者*/


#include

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. /* 定义形式参数 */
{
int m=(n-1)/2. /* 计算10个数需要循环几次,因为是两两调换第一个数组是x[0]故应该是int(9/2) */
int temp,i,j. /* 建立零时变量temp用于每次交换处理时零时存储x的值 */
for (i=0.i<=m.i )
{
j=n-1-i. /* 反向计算出被调换的数组下标,例如x[0] 对应的x[n-1-i]就是x[9] */
temp=x.
x=x[j].
x[j]=temp.
}
}

/* 次题需要注意的是:这里由于a[10]和x[10]是共同享内存地址位的所以进行交换后a[10]的实际值也就发生了改变 */

/*程序作者:管宁
站点:www.cndev-lab.com
所有稿件均有版权,如要转载,请务必著名出处和作者*/


#include

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.
}
}

/* 此例同样要注意到利用指针进行数组的操作同样改变了实际数组各元素的值 */


相关文章


06年9月计算机等级考试二级C语言考前密卷八
挑战30天C 入门极限:在c_c 中利用数组名和指针进行排序的例子
06年9月计算机等级考试二级C语言考前密卷九
挑战30天C 入门极限:c_c 关于多维数组指针变量的学习!
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛