• C语言中关于strcry 引发的思考


    无意中看到了关于面试题的博客   博客的出处

    为了防止博客的失效我将其代码引入:

        

    void strcpy( char *strDest, char *strSrc )
    {
      while( (*strDest++ = * strSrc++) != '’ );   // ........................................2分
    }
    void strcpy( char *strDest, const char *strSrc ) 
    //将源字符串加const,表明其为输入参数,加2分
    {
      while( (*strDest++ = * strSrc++) != '’ );   // ........................................4分
    }
    void strcpy(char *strDest, const char *strSrc) 
    {
     //对源地址和目的地址加非0断言,加3分
     assert( (strDest != NULL) && (strSrc != NULL) );  
     while( (*strDest++ = * strSrc++) != '’ );  //............................................7分
    }
    char * strcpy( char *strDest, const char *strSrc ) 
    {
     assert( (strDest != NULL) && (strSrc != NULL) );
     char *address = strDest; 
     while( (*strDest++ = * strSrc++) != '’ );  //........10分  (通过查阅资料,我认为这个结果并不是满分
     return address;
    }

    看到这道题后,分数的逐步提高,嗯,的确是。 那看了据该分析一下为什么分数有提高,其实原作者已经写出来,我自己做点自己的理解描述:

    1. 使用断言方式检验参数,如果传入的参数中 存在NULL,ok。。。。。gameover。。。。

    2. 使用const来约束strSrc,符合程序健壮性原则。凡是是修改试图改动strSrc的内容,编译器将产生错误。

    可以参见 楼主其他博文中关于指针常量的讲解。

    3. 为了链式编程 。

    4. 通过一个例子 对这个问题进行一下解析

    5  我算是笨死了不知道站在巨人的肩膀上  巨人的肩膀上(ps:链接)   

     看到这道题后,描述第二个问题 while( (*strDest++ = * strSrc++) != '’ );

    1. 我们首先确定问题     优先级 ,  关于c语言符号优先级 已经有帖子描述 。

    2. ok,我们举一个上学时候常见的例子。问题:  i++和++i ;

            

    #define PRODUCT(X) (X*X)
    int main(void)
    {
        int i = 3,
            j, k;
        j = PRODUCT(i++);
        k = PRODUCT(++i);
    
        printf("j = %d, k = %d", j, k);
        return 0;
    }

    答案  j = 9, k = 49; 关于这个有详细的描述  

    http://www.cnblogs.com/rookie2/archive/2012/11/11/2765112.html;

    下边 继续我们的话题:

    while( (*strDest++ = * strSrc++) != '’ );  我们现在将它进行逐步分级

     1) strDest = *strSrc;

     2) *strSrc != 0;

     3) *strDest ++;

     4)*strSrc ++;

      

            

          

             


     

  • 相关阅读:
    Tornado @tornado.gen.coroutine 与 yield
    ThreadPoolExecutor执行任务,异常日志缺失问题
    Mybatis关联查询<association> 和 <collection>
    Spring整合mybatis
    Jedis操作Redis--Key操作
    Jedis操作Redis--SortedSet类型
    Jedis操作Redis--Set类型
    同义词 “stop from”,“keep from”和“prevent from”的区别
    test
    Python win32gui调用窗口到最前面
  • 原文地址:https://www.cnblogs.com/causal360/p/4736135.html
Copyright © 2020-2023  润新知