【函数 传参】 CSDN 一道面试题 set1() set2()

794阅读 0评论2012-09-25 ai616818
分类:C/C++

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赋值生效, 应该是  二维指针!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
上一篇:【红豆的童话】『盘点』那些电影叫你看上100遍都不会厌
下一篇:Linux中断研究