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