给函数赋值了!

  写了一个这样的程序,是将字符数组中的某个元素替换成其他内容。

 1  #include  < iostream >
 2  using   namespace  std;
 3 
 4  void  str( char *  a,  int  i,  char  b)
 5  {
 6      a[i]  =  b;
 7  }
 8 
 9  int  main( void )
10  {
11       char  a[]  =   " A donkey " ;
12      str(a,  2 ' m ' );
13      cout  <<  a  <<  endl;
14       return   0 ;
15  }

  突然想到C++里有个变量引用的用法,使想到了一个自己觉得有点怪的东西。
  既然引用是一个变量的别名,与原变量都是指向同一个内存空间,那函数返回了变量的引用会不会能像变量一样可以赋值?便写了下面一段:

 1  #include  < iostream >
 2  using   namespace  std;
 3 
 4  char &  str( char *  a,  int  i)
 5  {
 6       return  a[i];
 7  }
 8 
 9  int  main( void )
10  {
11       char  a[]  =   " A donkey " ;
12      str(a,  2 =   ' m ' ;
13      cout  <<  a  <<  endl;
14       return   0 ;
15  } 

  编译运行发现可以实现同样的功能。这样就出现了变量可以被赋值的奇怪写法了!
  与同学交流我的发现后,同学提出如果不用引用行不行?
  在以前不用引用的时候好像都没想过这个问题。但仔细想想,觉得不行。因为有返回值的函数,它返回的变量是函数运行时临时生成的,函数运行完,这个返回值的空间也会被释放掉。连空间都已经被释放,它应该就存在了,更不用其中的值了。
  于是也实验了一下,结果编译时报告无效变量的错误。

你可能感兴趣的:(给函数赋值了!)