关于数组的问题,不知道本质原来是什么? !请帮忙
1.int t[3]和int t[3]={1}的值有什么区别?如果是char[3]和char[3]={‘a’}呢?
2.int a[10]和int *p=new int[10]在内存分配上有什么区别?
这个问题有点菜了,但是我找不到确切的答案,请高手帮忙!
[解决办法]
1、调试一下,跟踪数组里每个成员的值
2、栈和堆的区别
[解决办法]
1.int t[3] = {1};将数组的3个元素初始化为1,相当于int t[3] = {1, 1, 1};char类型是一个道理。
2.如果是函数局部变量,int a[10]在栈中分配内存,退出函数内存被清除,int *p = new int[10]在堆中分配内存,如果不delete,退出函数后,内存依然占用
[解决办法]
首先,‘int t[3]’和‘int t[3]={1}’的值区别是:
‘int t[3];’声明了一个名为t的int型数组,其中每一个数组元未经初始化,其值未 知;
‘int t[3]={3}’意义同上,但是t[0]数组元被显示的以‘3’初始化,其值为3,后面2个数组元其值未知(未经初始化)。
你所说的“如果char[3]和char[3]={‘a’}呢?”,回答同上理,但恳请你数组名不能用“cahr”等关键字,这样会令编译器“不高兴”的(类似error C2632: “char”后面的“char”非法)。
另外,关于“int a[10]”和“int *p=new int[10]”在内存分配上区别是,前者是在堆栈上创建长度为10的整型数组,在其生命结束后解构和内存资源释放的责任是语言的栈摧毁机制,后者是在堆空间上创建的长度为10的整型数组,在其生命期结束后,其解构和内存资源释放的责任是你-C++程序员(不能忘了呵)!