StringCopy()函数的简化过程

原创 2007年10月07日 15:43:00

下面是StringCopy()函数的最原始版本,基于标准库的strcpy(),该函数用了数组符号,较为容易理解

char *StringCopy( char dest[ ], char sour[ ] )
{
    int i;
    for(i=0; sour[i]!='/0'; i++)
    {
        dest[i] = sour[i];
    }
    dest[i] = '/0';
   
    return dest;
}

下面是StringCopy()函数的另外一个版本,用指针代替数组,完成了同样的功能。

char *StringCopy( char *dest, char *sour )
{
    int i;
    for(i=0; sour[i]!='/0'; i++)
    {
        dest[i] = sour[i];
    }
    dest[i] = '/0';
   
    return dest;

将程序部分也改用指针来写

char *StringCopy( char *dest, char *sour )
{
    int i;
    for(i=0; *(sour+i)!='/0'; i++)
    {
        *(dest+i) = *(sour+i);
    }
    *(dest+i) = '/0';
   
    return dest;
}

如果对该函数用指针参数,就不再需要指针变量i进行指针递增了,源程序如下

char *StringCopy( char *dest, char *sour )
{
    char *temp = dest; //保存最后要返回的dest的首地址
    for(; *sour!='/0'; sour++, dest++)
    {
        *dest = *sour;
    }
    *dest = '/0';
    dest = temp;
    return dest;
}

下面,我们可以让for循环的判断更加有效,这个版本依然要检查空字符,但是它是通过检查字符本身来判断。因为空字符等于0,当遇到空字符时判断条件为假。

char *StringCopy( char *dest, char *sour )
{
    char *temp = dest; //保存最后要返回的dest的首地址
    for(; *sour; sour++, dest++)
    {
        *dest = *sour;
    }
    *dest = '/0';
    dest = temp;
    return dest;
}

用一个赋值语句就可以让该函数变的更加高效,赋值语句就等于一个值,这个值就是被赋予的值。据此可以让循环变的更加简洁。

char *StringCopy( char *dest, char *sour )
{
    char *temp = dest; //保存最后要返回的dest的首地址
    for(; *dest = *sour; sour++, dest++)
    {
    }
    dest = temp;
    return dest;
}

当我们采用while循环时,我们发现可以让该函数更加简洁:

char *StringCopy( char *dest, char *sour )
{
    char *temp = dest; //保存最后要返回的dest的首地址
    while(*dest++ = *sour++)
    {
    }
    return temp;
}

当然,我们注意到该while循环体为空,因此完全可以用一个分号取代该循环体以得到我们的StringCopy()的最终简化版:

char *StringCopy( char *dest, char *sour )
{
    char *temp = dest; //保存最后要返回的dest的首地址
    while(*dest++ = *sour++);
    return temp;
}

这个函数短小精悍,但是他与最原始的函数完成的是同样的事情。

 

以上例程来自于《软件开发:编程与设计(C语言版)》P345-349,代码均在DEVC4.9.9.2编程环境下调试通过

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

MySQL 存储过程和函数以及数据恢复和备份

一、存储过程和函数的引入 存储过程和函数是在数据库中定义一些 SQL 语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的 SQL 语句。存储过程和函数可以避免开发人员重复的编写相同...

sqlserver 自定义、删除、执行 函数和存储过程

自定义函数:```if (object_id('p_wm_get_dynstore', 'P') is not null) drop proc p_wm_get_dynstoregocreate ...

java 函数 存储过程

  • 2013-04-05 22:38
  • 1.33MB
  • 下载

uboot 启动过程中各函数功能详细分析

转自:http://blog.chinaunix.net/uid-21410064-id-96753.html uboot启动过程中各函数功能详细分析 本文主要分析流程中,各函数的功能。按...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)