给函数赋值了!

Posted on 2008-04-13 07:49 Codeboy 阅读(347) 评论(0)  编辑 收藏 引用 所属分类: C++学习历程

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

 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 } 

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