首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于一个栈的程序段[请教]

2012-02-27 
关于一个栈的程序段[请问]unchar*copyf(unchar*destp,constunchar*scrp,usintlength){registersignedlongc

关于一个栈的程序段[请问]
unchar   *   copyf(unchar   *destp,   const   unchar   *scrp,usint   length)
{   register   signed   long   count;
    uchar   *retp;
    count   =   (signed   long)(length);
    rept   =   destp;
    while(   --count> =0){
          *((unchar*)destp)++   =   *((unchar   *)scrp)++;
    }
    return(retp);

请问:   1,为什么   count   要定义成   signed   long   型?   寄存器变量register   为什么不定义为char型?
              2,为什么要把整型的length   强制转换成有符号长整形,这里作者一定要把count   用有符号长整型表示,有什么特殊的用意或计算机有什么内在的工作原理不得不这样么?
            3,*((unchar*)destp)++   =   *((unchar   *)scrp)++;   一句是什么意思?太多*号有点糊涂了。
            4,函数的参数已经定义了   unchar   *destp   ,为什么   *((unchar*)destp)++   =   *((unchar   *)scrp)++;     这个语句中还得再定义一次(unchar   *)   destp   呢?

感谢各位前辈的详细耐心解答,谢谢了。

[解决办法]
1.因为这个函数在下面使用了 while( --count> =0),count明显应该是有符号函数,否则此判别式恒为TRUE,变成死循环了。但如果定义成char,其表示范围小于那传入的参数uint length,不合适。因此没考虑硬件CPU的特点,光从代码的实现角度只能是有符号的long,或者int。
2.这个问题在1中我已经提到,一方面这是和编程序思路来的,对于寄存器变量类型的选择,本人也只略知一二,但是也应该和具体CPU相关,不同的CPU是有不同的特性的。
3.*((unchar*)destp)++ = *((unchar *)scrp)++;
将源数据赋值给目标数据,以指针实现数据 copy的作用
首先scrp(是指向unchar的const,意思是所指变量是个只读无符号字符)是个指针,*((unchar *)scrp,指针强制转换,*((unchar *)scrp)++实现取变量值的功能,并指针自加,指向下个数据,前面的也目标指针也是这样的。
4.这个不是重定义,只是做了个强制类型的保护,看了代码,应该可以不用这个。直接
*destp++ = *((unchar *)scrp)++;
不知道以上答案是否让人满意!

热点排行