代码之家  ›  专栏  ›  技术社区  ›  geschema

新字符[10]和新字符(10)有什么区别

c++
  •  38
  • geschema  · 技术社区  · 15 年前

    在C++中,有什么区别?

    char *a = new char[10];
    

    char *a = new char(10);
    

    谢谢!

    6 回复  |  直到 15 年前
        1
  •  64
  •   GManNickG    15 年前

    第一个分配一个10个字符的数组,第二个分配一个初始化为10的字符。

    std::vector<char>

        2
  •  14
  •   eq-    15 年前
    new char[10];
    

    动态分配一个char[10](char数组,长度10),值不确定,而

    new char(10);
    

    同样,动态分配一个字符,整数值为10。

        3
  •  11
  •   Squirrelsama    15 年前
    char *a = new char[10];
    ...
    delete [] a;
    

    以上动态分配和释放10个可用于存储字符的连续内存插槽。

    char *a = new char(10);
    ...
    delete a;
    

    上面动态地分配和释放一个用整数值初始化的内存槽 10 ,相当于char值 '\n' .


    不要使用 std::vector<T> 如果你不首先理解指针。了解内存分配和指针的工作方式 会让你成为一个更好的程序员 .

        4
  •  2
  •   radato    11 年前

    size_t size = 10; //or any other size
    std::string buff(size, 0); //or: std::string buff(size, '\0');
    

    &buff[0]
    

    当需要使用const char*时,可以使用:

    buff.c_str()
    

    最大的优点是你不需要释放内存,stl会帮你处理。 下一个优点是可以使用所有stl字符串函数

        5
  •  0
  •   Amir Zadeh    15 年前

    好吧,第一个将组成一个数组。 您的代码可以将其用作有效字符,请考虑:

    char * x ;
    cin >> *(x=new char()) ;
    

    将动态生成一个字符,然后从stdin读取它。

        6
  •  0
  •   nik    7 年前

    [10] 定义一个数组,其中as(10)为新创建的(单个)字符赋值。

    如果要在C中声明大小为10的数组,并且错误地定义了 字符a(10) , 编译器会抛出语法错误,所以您可以修复它。 但是在C++中,它会编译得很好,程序在访问1(或)时可能崩溃。 答。

    矢量 我希望你明白我的意思。