[转贴]宣告一个变量时,若没去用,是否会浪费内存?
在C/C++中,只要宣告一个变量,如int i,尽管没去用它,内存已经占了4 byte的内存了,这个动作称为Definition,以下简单的源代码即可证明,结果可显示该变量的内存地址。
1
#include <iostream>
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
using namespace std;
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
int main() {
6
int i;
7![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
cout << &i << endl;
9
10
return 0;
11
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
若只想宣告变量,却不想先占用内存,等要使用时才占内存,这种叫做Declaration,只要加上extern即可
1
#include <iostream>
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
using namespace std;
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
int main() {
6
int i;
7
extern int j;
8![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
cout << &i << endl;
10
count << &j << endl;
11
12
return 0;
13
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
以上的程序,无法编译成功,会出现『undeclared identifier』的错误讯息,因为在C/C++中,任何变量必须经过Definition后才能使用,也就是说变量必须占了内存才能用,j因为宣告为extern,只有Declaration,但尚未Definition,没有内存地址,所以Compile无法过。