c++在堆区中创建数组的一些注意事项 |
您所在的位置:网站首页 › c创建数组的正确语句是什么 › c++在堆区中创建数组的一些注意事项 |
Q1:我们为什么好端端的不在栈中创建数组,偏要跑到堆区中哪? R1:栈中的空间是有限的,在面对一些长度很大的数组的时候,会有力不从心的感觉,所以我们选择了在堆区中。 1.写法 1.1堆区创建一维数组的写法 类型名 * 指针名=new 类型名[数组长度] eg: int *p=new int[10] 这就表示我们在堆区中创建了个int类型的一维数组,长度是10,并且用int类型的指针指向他来便于我们后期维护。 注意:前后类型最好一致,或者可以转换。如果前面是string,后面是int这显然不行。 1.2堆区创建二维数组的写法创建方法一:总感觉这个方法是在为了创建而创建,使用起来并不方便,也可能是我还没找到正确的打开方式。 类型名 (*指针名)[列数]=new 类型名[行数][列数] eg:int (*p)[5]=new int[10][5]; 这就表示我们在堆区创建了一个十行五列的int类型数组,但是这里仅仅是定义了,还没有赋值,不能直接用。 注意:1.括号很重要,千万别忘了,很容易错写成int *p[10]=new int[10][5]; 这两个意思是完全不同的,下边这个连编译都通不过,毫无逻辑可言。 2. 创建方法二:new/delete int **Array = new int *[ArrayRow]; for (int i = 0; i < ArrayRow; i++) { Array[i] = new int[ArrayCol](); // 初始化 0 } for(i = 0; i < ArrayRow; i++) // 释放内存 { delete[] Array[i]; } delete[] Array; 创建方法三: malloc/free: int **Array = (int**)malloc(ArrayRow * sizeof(int *)); // 先行 for (int i = 0; i < ArrayRow; i++) { Array[i] = (int*)malloc(ArrayCol * sizeof(int)); // 后列 memset(Array[i], 0, ArrayCol * sizeof(int)); // 初始化 0 } for (int i = 0; i < 3; i++) // 释放内存 { free(Array[i]); } free(Array);
2.用法 2.1一维的用法 1.for循环赋值 //把指针设置为const类型,防止p后面被改变,这点很重要,之后在下面会特别介绍,防止指针中途改变从而导致最后无法被析构 int *const p=new int[10]; //为一维数组赋值 for(int i=0;i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |