分类: Java
2012-08-30 15:35:29
其实就这样的,从字符串对象A复制字符到字符串对象B,就是这样简单.先给程序
#include #include #include char* copy_1(const char*,char*); void copy_2(const char*,char*); int main() { char* c = "hello google!!"; int len = strlen(c) + 1; char* t = (char*)malloc(len); if(NULL) //这个开关用于测试不同的方法 { t = copy_1(c,t); printf("copy_1:\tbefor:%s\tafter copy:%s\n",c,t); }else{ copy_2(c,t); printf("copy_2:\tbefor:%s\tafter copy:%s\n",c,t); } free(t); return 0; } // 复制字符串的方法 1 char* copy_1(const char* in,char* out) { if(in == NULL | out == NULL) { return; } char *t = out; // A while((*out++=*in++)!='\0'); *(++out)='\0'; return t; } //复制字符串的方法 2 void copy_2(const char* in,char* out) { if(in == NULL || out == NULL) { return; } int len = 0; while((*out++=*in++)!='\0') { len++; } *(++out)='\0'; for(;len>0;len--) \\ B { out--; } } |
先看方法_1
目的很简单,从字符对象指针 c 复制到对象指针t
我觉得这种方法比较符合java的方法使用,传一个对象进去,然后返回另一个对象
但是不知道大家有没有发觉这个 copy_1方法中的 \\A 的地方,在把传进来的对象out
在复制前先再定义多一个指向这个out对象的指针,同时返回的也是这一个指针,但没有返回参与复制过程的out对象,就这样看,似乎多此一举,但后面你就会慢慢了解了.
再方法_2
目的一样,都是字符串复制,但是这个方法,明显看来象C语言的方法风格了
把一个的字符对象传进来,然后在方法里进行复制操作,OK在复制完后,应该可以直接
返回了,因为字符复制已经完成了,但是,留意一个方法2的 \\B 那里,又进行了一个加加减减的操作,把 out 对象的指针退回了字符的长度,就象一个数组那样,游标回到数组的第一位了,这样就明白了为什么第一个方法它再定义一个对象指定,然后再操作了.
总结,说明了指定不仅仅是一个保存了一对象的地址的4个字节的东西,同时它还保存了指向对象的游标位移.大家可以试一下,如果直接不要方法2的 \\B的那一个循环,看看输出的结果是什么..可以这样说..肯定出错的...当时 的加入都是自己在想这个指针问题的时候,突发奇想而已....还望各位高手向小弟多提意见....
传智播客收集整理,关,提。