1、test中的"zhuguowansui"是常量不在栈中。char* str = "zhuguowansui";的意思是将"zhuguowansui"这个字符串的首地址赋值给str,或者说让str指向"zhuguowansui"这个字符串。return str;的意思是返回str变量的值,str是个指针,内容是"zhuguowansui"这个常量的地址。也就是说返回的是"zhuguowansui"的地址。因为常量存储在常量池中,不会因为函数返回而释放,所以返回其地址是有效的。test2中的char str[]在栈中声明了一个数组,并用"hahahah"初始化它char str[] = "hahahah";的执行结果是:在栈上开辟8个连续的字节,内容分别是'h','a','h','a','h','a','h',0。str则可以看做指向这8个字节的首字节的指针。即,其内容是第一个'h'的地址。由于这8个字节在栈上,函数返回时即无效化。所以返回这里str是没有意义的。2、Bruce* pBruce;声明一个Bruce类型的指针。注意!它只是一个指针。这个指针是全局变量,放在全局变量区。但是new出来的实例是在堆上的。也就是说,pBruce这个全局变量中存放的只是new出来的实例的地址而已。而这个实例存储在堆上,所以需要你delete。3+4、用VS的调试功能debug菜单或者工具栏上面都有控制命令另外还有快捷键... |