在c/c++中利用数组名作为函数参数传递排序和用指针进行排序的例子。
以下两个例子要非常注意,函数传递的不是数组中数组元素的真实值而是数组在内存中的实际地址。
#include<stdio.h>
voidmain(void)
{
voidreversal();
staticinta[10]={0,1,2,3,4,5,6,7,8,9};/*建立一个数组并初始化*/
inti;
for(i=0;i<10;i++)
{
printf("%d",a);
}
printf("
");
reversal(a,10);/*调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x*/
for(i=0;i<10;i++)
{
printf("%d",a);
}
printf("
");
}
voidreversal(x,n)
intx[],n;/*定义形式参数*/
{
intm=(n-1)/2;/*计算10个数需要循环几次,因为是两两调换第一个数组是x[0]故应该是int(9/2)*/
inttemp,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]的实际值也就发生了改变*/
#include<stdio.h>
voidmain(void)
{
voidreversal();
staticinta[10]={0,1,2,3,4,5,6,7,8,9};/*建立一个数组并初始化*/
inti;
for(i=0;i<10;i++)
{
printf("%d",a);
}
printf("
");
reversal(a,10);/*调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x*/
for(i=0;i<10;i++)
{
printf("%d",a);
}
printf("
");
}
voidreversal(x,n)
int*x,n;/*定义x为指针变量*/
{
inttemp,*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;
}
}
/*此例同样要注意到利用指针进行数组的操作同样改变了实际数组各元素的值*/
版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明!