鱼C论坛

 找回密码
 立即注册
查看: 3322|回复: 2

数组前后倒置。谭浩强书上的代码。谁帮忙看下?

[复制链接]
头像被屏蔽
发表于 2011-7-28 20:15:20 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-28 21:00:14 | 显示全部楼层
我给你写个简单的:
#include<stdio.h>

void resive_char( char *str)
{
        char tmp;
        char *str_last;
        
        /*让str_last指向字符串尾部*/
        for (str_last = str; *str_last !='\0'; str_last++)
                ;
        str_last--;
        
        /*当到达中间时则结束循环*/
        while (str < str_last)
        {
                tmp = *str;
                *str++ = *str_last;
                *str_last-- = tmp;
        }
}
int main(void)
{
        char str[100]="hello, world!";
        resive_char(str);
        printf("%s\n",str);
        getch();
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-28 23:59:18 | 显示全部楼层
#include<stdio.h>        //这个就不解释了
main()                            //主函数
{
void inv (int*x,int n);      //定义翻转函数 inv
int i,a[10]={3,7,9,11,0,6,7,5,4,2};   //定义变量i 数组a[]
printf("The original array:\n");          //不解释
for (i=0;i<10;i++)                            //循环  目的 依次打印当前数组的每一个数 当前为原始数组
    printf("%d ",a[i]);
    printf("\n");
    inv(a,10);                          //调用翻转函数 iva(a,10) a表示数组a[10]的第一个位置相当于a[0]的位置,10表示长度
    printf("The array has been inverted:\n");//不解释
    for(i=0;i<10;i++)     //循环 目的 依次打印当前数组的每一个数  当前数组为翻转后的数组
      printf("%d",a[i]);
    printf("\n");
}
void inv(int *x,int n )    //翻转函数 
{
int *p,temp,*i,*j,m=(n-1)/2;
/*定义指针p 零时变量temp 指针i 指针j 整个数组的中间位置m,因为翻转前一半和后一半交换就可以了*/  
i=x;j=x+n-1;p=x+m;  
/*把a[10]数组的第一个位置也就是a[0]的位置给i,估计你这里不明白,我详细解释下,调用函数是inv(a,10),所以这里的*x==a[0],x等于a[0]所在的位置也就是第0号位,用指针指向a[0]的位置,就是a[0]的值也就是*x,把x的值赋给i也就是把a[0]的位置赋给i,正确的理解应该是把数组的首地址传给了i,之后i=0,*i=a[0],i=1,*i=a[1]依此类推,不解释了,j也一样,只是指向的是最后一个位置,p中间位置,不用再过多解释了吧*/
for(;i<=p;i++,j--)  //算法很简单了,就是最简单的用零时变量存放数据,进行交换,好像没有什么好解释的了
     {
      temp=*i;*i=*j;*j=temp;
     }
return;
}
希望你能看的明白,估计是指针把你指晕了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-8 10:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表