这两个星期内都是在忙公司的事情,所以没有什么时间看C语言,OK,这几天,自己就发现了C语言中指针这个东西,以前看书觉得就只不过是一4个字节的,用于存放了某对象的地址而已,同时可以用这个地址加加减减.....但经过这一个过程后,发觉其实C语言java真的很多都不相同,以下就说一下关于这个指针自己的一点实践经验吧,欢迎向我这个菜鸟多提建议....
 
     其实就这样的,从字符串对象A复制字符到字符串对象B,就是这样简单.先给程序
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
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的那一个循环,看看输出的结果是什么..可以这样说..肯定出错的...当时 \\B的加入都是自己在想这个指针问题的时候,突发奇想而已....还望各位高手向小弟多提意见....