说出下面四个变量之间的区别 (A) int ival = 1024; (B) int *pi1 = &ival; (C) int *pi2 = new int(1024); (D) int *pi3 = new int[1024];
ival为堆栈变量,其值为1024; pi1指向ival,其值为&ival(或*pi1==1024); pi2指向堆中分配的一个int变量,其值为1024; pi3为堆中分配的数组,其值未初始化。
不过,我认为pi2,pi3也是堆栈中的变量,只不过,它们的值为堆中的地址。就是用堆中的(元素类型为整型,个数为1024)数组初始化了它。实际上只是把这个动态数组的首地址赋值给它了。
事实上,只要是在函数体内声明的变量,都会在堆栈中为之分配一个空间(static、extern除外),在函数体内根本无法定义或操作堆,只有通过指针对它“遥控”。
我被搞糊啦,到底是堆、栈,还是堆栈啊!我记得堆是堆,栈是栈,堆栈是两个概念和起来的说法呀!
堆栈是一种栈,每在应用程序执行之前,系统会先分配一块内存给应用程序以栈的方式使用,这就是堆栈。你说的对,栈是一种概念,应用在LIFO当中,你可以在堆或堆栈中分配一块内存以栈的方式使用。而堆其实就是系统未分配给用户的给用户使用的内存块。
[此贴子已经被作者于2004-08-29 19:41:33编辑过]