Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5171
  • 博文数量: 5
  • 博客积分: 206
  • 博客等级: 入伍新兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-26 19:55
文章分类
文章存档

2012年(5)

我的朋友
最近访客

分类: Java

2012-08-30 15:35:29

 这两个星期内都是在忙公司的事情,所以没有什么时间看C语言,OK,这几天,自己就发现了C语言中指针这个东西,以前看书觉得就只不过是一4个字节的,用于存放了某对象的地址而已,同时可以用这个地址加加减减.....但经过这一个过程后,发觉其实C语言java真的很多都不相同,以下就说一下关于这个指针自己的一点实践经验吧,欢迎向我这个菜鸟多提建议....

  其实就这样的,从字符串对象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的那一个循环,看看输出的结果是什么..可以这样说..肯定出错的...当时 的加入都是自己在想这个指针问题的时候,突发奇想而已....还望各位高手向小弟多提意见....

传智播客收集整理,关,提。

阅读(649) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~