C++ char数组[50]和char*array=new char[50]之间有什么区别?
我在网上搜索了一下,没有发现任何与此相关的信息C++ char数组[50]和char*array=new char[50]之间有什么区别?,c++,arrays,pointers,C++,Arrays,Pointers,我在网上搜索了一下,没有发现任何与此相关的信息 char array[50]; char *array = new char[50]; 告诉我他们之间的区别 char数组[50]是堆栈上分配的50*sizeOfChar空间。 char*array=new char[50]是堆上分配的50*sizeOfChar空间,返回第一个char的地址 当变量范围结束时,堆栈上分配的内存将自动释放。 使用new操作符分配的内存不会自动释放,开发者需要调用delete 混合使用C/C++是一个不错的方法,但有
char array[50];
char *array = new char[50];
告诉我他们之间的区别
混合使用C/C++是一个不错的方法,但有时会令人困惑:
char array[50];
在堆栈上分配,所以您不需要担心内存管理。当然,你可以使用<代码> STD::数组数组< /C> >,这是C++带来的一些优点(比如返回大小的方法)。在您离开其作用域之前,该数组一直存在
char *array = new char[50];
这里需要管理内存,因为在释放内存之前,内存一直保存在堆中重要信息,无论何时您想要删除它,都应该使用它:
delete [] array;
还有free(数组)
(标准C)和delete
(不带括号)。无论何时使用newsometype[…]
,都不要使用这些
另外,在这两种情况下,您仍然可以使用包含50个元素的char数组:-)您是否尝试过像这样搜索堆栈与堆分配:其中只有一个可以(并且应该)传递给
delete[]
操作符。。。而且sizeof
会产生不同的结果……您认为它们之间有什么相似之处?在编程中,“两者之间的区别是什么”类型的问题通常不会让你走得很远。您应该直接询问一些有用的问题,例如“我什么时候会这样做,什么时候会以另一种方式做?”——但这是基于观点的,因此与堆栈溢出无关。更一般地说,要在这个层次上自学,你需要一个讨论论坛,比如Quora,或者Quora上的某个地方;而不是堆栈溢出。应该用来代替两者。。。(或)