惨淡经营

想不被别人淘汰,先得学会自己淘汰自己!

导航

关于指针

//取得最后的字符,指针只是一个首地址。
char*  CGFTPTestDlg::get_filename(char* path)
    
char* p;
    p 
= path+strlen(path);
    
while ((p > path) && (*!= '/'))
        p
--;
    
return *== '/' ? p+1 : p;
指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的。

在上面的例子里,p首先取得paht的末地址,然后将p向前移,直到符合条件。

一、 
    
char *p; 
    strcpy(p,
"come in please. "); 
    请问这是把字符串内容复制给p,还是把字符串地址复制给p。 
    二、 
    strlen1(
char *s) 
    

     
char *p; 
     p
=s; 
     
while(*p)p++
     
return(p-s); 
    }
 
    请问,
return(p-s)语句返回的值返回到什么地方? 
   第一个问题:strcpy是复制内容,而不是地址。strcpy将源指针所指的内容复制到目的指针所指的地址(也就是指针p所指的地址)去。你这个程序有问题,因为在使用strcpy时候,p指针所保存的地址必须是合法的(象你这样,p的值是随机的,可能指向系统保存数据的地方),所以你在使用p指针之前应该先分配一段内存空间,然后让p指针指向该地址。象你这样可能导致死机或程序错误。如果要复制地址(实际上是给p赋值),使用p = "come in please.\n"就可以了。
    第二个问题:一般,如果return的返回值的长度小于2个字节,TC将返回值放在AX寄存器中,由调用该函数的程序取走。如果长度大于2个字节,TC将返回值放在堆栈中,由调用程序取走。如果你不同汇编软件相互调用,用不着管这些。

posted on 2004-09-27 20:26  hone  阅读(469)  评论(0编辑  收藏  举报