当前位置: 首页 > 科技观察

EasyC++,C++指针学习之三

时间:2023-03-16 20:20:17 科技观察

大家好,我是梁唐。我们使用指针来创建单个变量。在这种情况下,使用指针的优势并不明显。很多程序员还是选择使用声明变量的方式,而当我们需要动态创建数组等大数据时,指针就可以显示出优势。我们通过声明创建的数组在编译时就已经分配了内存空间,即使我们在程序中根本不使用它,它仍然存在并占用资源。这种在编译时为数组分配内存的方式称为静态绑定,也就是说数组是在编译时添加到程序中的。使用new创建的数组是在运行时。前面我们说了,两者最大的区别就是一个是栈内存,一个是堆内存。我们可以通过程序来控制是否创建,在什么情况下创建,以及数组的长度。因此,这种数组称为动态数组(dynamicarray),而这种创建方法称为动态绑定(dynamicbinding)。创建数组使用new创建数组非常容易。与申报方式相同。您只需要指定数组的类型和元素的数量。int*arr=newint[10];new操作符会申请一块10个int大小的内存,并将第一个元素的地址返回给指针arr。对于new创建的数组,我们也可以使用delete来释放,但是需要注意的是,由于我们申请的是数组类型,所以在删除的时候也需要说明这是一个数组:delete[]arr;如果不带方括号,delete只会释放指针指向的元素,也就是数组的首位。所以我们在使用new和delete的时候一定要注意。如果创建时使用方括号申请数组,删除时也需要加上方括号。不匹配可能会产生不确定的后果,所以要小心。C++Primer编译了几个规则并把它们带过来:不要使用delete释放不是由new分配的内存不要使用delete释放同一块内存两次如果你使用new[]为数组分配内存,你应该也可以使用delete[]来释放它。非数组用new分配内存,应该用delete释放。删除对于空指针是安全的。动态数组的使用说完delete的用法,我们再来看看动态数组的使用。这里有个问题就是我们通过new创建的虽然是一个数组,但是它是以指针的形式获取的,那我们怎么使用呢?其实很简单,我们只是把它当作一个数组来使用:int*p=newint[10];p[2]=5;cout<