C++静态变量问题
来源:互联网 发布:unity3d可以不用vs2015 编辑:程序博客网 时间:2024/06/05 10:58
今天实现一个函数的时候第一思路就是静态变量
eg:
template<class Elem>int putTreeInArray(GTNode<Elem> *t1, Elem a[]){ static i = 0; a[i] = t1->value(); for(GTNode<Elem> *temp = t1->leftmost_child(); temp != NULL; temp = temp->right_sibling()) putTreeInArray(temp,a); return i;}
而这个函数的目的是将一个普通树的结点值放入数组中,并返回结点数,而我将在下面一个函数调用这个函数两次。
eg:
template<class Elem,class Comp>bool isEqualTree(GTNode<Elem> *t1, GTNode<Elem> *t2){Elem a[MAXSIZE], b[MAXSIZE];int c,d;c = putTreeInArray<Elem>(t1,a);d = putTreeInArray<Elem>(t2,b);if( c != d)return false;inssort<Elem,Comp>(a,c);inssort<Elem,Comp>(b,d);for(int j = 0; j < c; j++){if( a[j] != b[j])return false;}return true;}
结果在测试的时候发现结果错误,于是乎就开始调试分析。
经调试发现调用两次putTreeInArray函数时,里面的static i变量 不会重置还是会在第一个基础上递增。
于是乎我打算再构造一个函数,eg:
template<class Elem>int putTreeInArray(GTNode<Elem> *t1, Elem a[]){static j= 0;a[j] = t1->value();for(GTNode<Elem> *temp = t1->leftmost_child(); temp != NULL; temp = temp->right_sibling())putTreeInArray(temp,a);return j;}
发现还是结果错误,经过分析发现:除了第一次重置时将静态变量重置为0之外,运用j并不能改变静态值,估计是因为静态变量用同一块内存地址,实质上还是同一个静态变量。还是从i开始递增。所以便在网络上寻找可以重置或者删除静态变量的方法,一番寻找后无果,希望如果有人看到这篇文章,又恰好知道如果重置或删除请告诉我。所以打算抛弃静态变量用另外方法就是修改参数,加上一个整形变量。
template<class Elem>int putTreeInArray(GTNode<Elem> *t1, Elem a[],int i){//static i = 0;//cout<<"static: "<<i<<endl;a[i] = t1->value();for(GTNode<Elem> *temp = t1->leftmost_child(); temp != NULL; temp = temp->right_sibling())putTreeInArray(temp,a,i++);return i;}template<class Elem,class Comp>bool isEqualTree(GTNode<Elem> *t1, GTNode<Elem> *t2){ Elem a[MAXSIZE], b[MAXSIZE]; int i=0; int c,d; c = putTreeInArray<Elem>(t1,a,i); d = putTreeInArray<Elem>(t2,b,i); if( c != d) return false; inssort<Elem,Comp>(a,c); inssort<Elem,Comp>(b,d); for(int j = 0; j < c; j++) { if( a[j] != b[j]) return false; } return true;}结果结果虽然获得了,但是静态变量这个问题还是无法解决。请指教!
- c++:静态成员变量和静态成员函数使用问题
- C中的静态变量
- C/C++静态变量
- [C++] 静态变量基本知识
- C 静态变量
- [C++] 静态局部变量
- c++--静态成员变量
- C语言静态变量
- C++静态变量问题
- 静态变量的问题
- 静态变量回收问题
- C/C++中全局变量,静态局部变量,局部变量的初始化问题
- C语言 静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- PHP 随机生成 用户名和 随机 密码
- 迭代器
- 基本概念
- 用Boost.python构建游戏脚本系统的尝试
- ov511驱动移植。2.6.32.2(一)
- C++静态变量问题
- 文件下载
- 覆盖抽象类及接口
- jsp/servlet定时监控的两种实现方式(1)
- vim/gvim中的拷贝与粘帖
- Replace INTO与INSERT INTO的不同之处
- App Widget
- STL中的空间配置器
- AsyncTask(异步任务处理)