请大家看如下的代码
-
C/C++ code
-
#include " stdafx.h " class Test { public : Test() {m_iNumber3 = 4 ; m_iNumber2 = 5 ; m_iNumber1 = 6 ;}; Test( int a){m_iNumber3 = 3 ; m_iNumber2 = 2 ; m_iNumber1 = a;}; void fun() {}; private : int m_iNumber1; int m_iNumber2; int m_iNumber3; }; int main( int argc, char * argv[]) { int temp = 3 ; double temp2 = 4 ; Test a( 1 ); a.fun(); Test * b = new Test( 1 ); b -> fun(); Test c(); // c.fun(); Test * d = new Test(); d -> fun(); return 0 ; }
为什么这里 c.fun(); 这句换的注释去了。就编译报错了。还有我看了不写这句话编程出来的程序的内存分配,为什么这里的c不分配内存呢。?
0012FF54 B8 2A 38 00 .*8.
0012FF58 70 2A 38 00 p*8.
0012FF5C 01 00 00 00 ....
0012FF60 02 00 00 00 ....
0012FF64 03 00 00 00 ....
0012FF68 00 00 00 00 ....
0012FF6C 00 00 10 40 ...@
0012FF70 03 00 00 00 ....
&a 0x0012ff5c
&b 0x0012ff58 "p*8"
b 0x00382a70
c CXX0017: Error: symbol "c" not found
&d 0x0012ff54 "?8"
d 0x00382ab8
&temp 0x0012ff70
&temp2 0x0012ff68
昨天去面试遇到这个问题。我虽然知道答应 不能说出为什么来。 今天回来认真的看了下。后来在论坛问了了。原来是因为
//Test c();//编译器以为你在声明一个函数,函数的返回类型是Test ,参数为空,函数名是c
Test c;//这样就ok了,声明一个Test对象,名字叫c
还有一个小问题 大家注意到了没有。b的地址 减去 a 的地址 是4.。。注意高低内存。。