Chinaunix首页 | 论坛 | 博客
  • 博客访问: 899448
  • 博文数量: 453
  • 博客积分: 7865
  • 博客等级: 少将
  • 技术积分: 5673
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-29 16:21
个人简介

时光荏苒..

文章分类
文章存档

2015年(46)

2014年(22)

2013年(68)

2012年(218)

2011年(99)

分类: C/C++

2012-09-25 23:13:34

CSDN:

点击(此处)折叠或打开

  1. void my_set1(char in[32])
  2. {
  3.     //int i = 0;
  4.     memset(in,0x00,32);
  5.     memcpy(in,"hello",5);
  6.     return;
  7. }
  8. void my_set2(char *in)
  9. {
  10.     in = (char*)malloc(32);
  11.     memset(in,0x00,32);
  12.     memcpy(in,"HELLO",5);
  13.     return;
  14. }
  15. void my_set3()
  16. {
  17.     char in[32] = {0x00};
  18.     my_set1(in);
  19.     printf(in);
  20.     my_set2(in);
  21.     printf(in);
  22. }
为什么运行my_set3()后得到的结果是hellohello,而不是helloHELLO,谁能来帮我分析一下?
 
 
首先,操作的都是指针。地址。
set1() 确实是在操作 in 
set2(): 
void fun(int a)
{
   a = b; 可以的  也就是说 a 当然可以左值。
 
}
这里就是, set2()中的 参数in  得到 传参后,又没有操作参数, 而是 重新 进行了 赋值。
 
 
set1() 一直操作的是 in
set2() 在 传参时候 得到in,然后 就 重新指向了新地址:malloc,接下来操作 得到的新地址。
 
这是根本原因! 重新指向了新地址。
 
 
 
 
追加:
my_set2()
中,in 其实没有真正赋值。
 
函数传参,是传值。   in 赋值是无效的。
若想对in赋值生效, 应该是  二维指针!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
阅读(729) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~