c++在堆区中创建数组的一些注意事项

您所在的位置:网站首页 c创建数组的正确语句是什么 c++在堆区中创建数组的一些注意事项

c++在堆区中创建数组的一些注意事项

2023-08-23 15:51| 来源: 网络整理| 查看: 265

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