Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ char数组[50]和char*array=new char[50]之间有什么区别?_C++_Arrays_Pointers - Fatal编程技术网

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];
告诉我他们之间的区别

  • char数组[50]是堆栈上分配的50*sizeOfChar空间。 char*array=new char[50]是堆上分配的50*sizeOfChar空间,返回第一个char的地址
  • 当变量范围结束时,堆栈上分配的内存将自动释放。 使用new操作符分配的内存不会自动释放,开发者需要调用delete

  • 混合使用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上的某个地方;而不是堆栈溢出。应该用来代替两者。。。(或)