Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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++ ()和[]动态分配之间的区别是什么?_C++ - Fatal编程技术网

C++ ()和[]动态分配之间的区别是什么?

C++ ()和[]动态分配之间的区别是什么?,c++,C++,谁能解释一下以下两种形式之间的区别,以及它们各自的作用是什么 int *p = new int[5]; 及 查询 1) 在这两种情况下,即整数或数组,我们分配的是什么 int *p = new int[5]; // you are allocating an array int *p = new int(5); // you are allocating an integer 2) 在这两种情况下,分配后的初始值是多少 3) 我从哪里可以找到关于这个的参考资料 int *p = new i

谁能解释一下以下两种形式之间的区别,以及它们各自的作用是什么

int *p = new int[5]; 

查询

1) 在这两种情况下,即整数或数组,我们分配的是什么

int *p = new int[5]; // you are allocating an array
int *p = new int(5); // you are allocating an integer
2) 在这两种情况下,分配后的初始值是多少

3) 我从哪里可以找到关于这个的参考资料

int *p = new int[5];
分配长度为5的整数“数组”。它返回指向5个连续内存块开头的指针,每个内存块都可以保存一个
int

int *p = new int(5);
将指针分配给初始化为值5的单个整数。

新表达式的语法如下所示:

  • 关键字
    new
  • 可选参数,用括号括起来
  • 类型
  • 可选初始值设定项
  • newint[5]
    中,类型为
    int[5]
    ,没有初始值设定项。因此,分配了一个由5个
    int
    s组成的数组,它们没有初始化,并且返回了指向第一个元素的指针


    newint(5)
    中,类型是
    int
    ,初始值设定项是
    (5)
    ,因此分配一个
    int
    ,它用值5初始化(就像
    intx(5);
    ),并返回指向它的指针。

    方括号用于表示其元素的数组。 所以在这个声明中

    int *p = new int[5];
    
    int *p = new int(5);
    
    分配了一个由5个未初始化的整数元素组成的数组。与定义比较

    int a[5];
    
    int x = int( 5 );
    
    在这份声明中

    int *p = new int[5];
    
    int *p = new int(5);
    
    分配了一个int类型的对象,该对象由5初始化。将其与以下定义进行比较

    int a[5];
    
    int x = int( 5 );
    
    或者干脆

    int x = 5;
    

    在第一个实例中,它分配一个大小为5的整数数组。在这种情况下,数组中的元素未初始化

    在第二个实例中,它分配一个值为5的整数

    参考资料:


    在这里,我将逐一回答所有问题

    问题1:在这两种情况下,即整数或数组,我们分配的是什么

    int *p = new int[5]; // you are allocating an array
    int *p = new int(5); // you are allocating an integer
    
    问题2:在这两种情况下,分配后的初始值是多少

    int *p = new int[5]; // Initially there will be random value on all indexes
    int *p = new int(5); // Initially value will be 5
    
    问题3:从哪里可以找到关于这个的参考资料

    检查以下链接


    “它们未初始化…”。。。学究般地说,它们实际上是默认初始化的,对于内置类型,这意味着未初始化。@Nawaz这仅适用于由于与C兼容而在类或方法范围之外无法访问的类型。此外,它们不是默认初始化的,而是零初始化的。@xvdiff:你错了。在这个网站上搜索“默认初始化、零初始化和值初始化”,你会得到很多讨论它们的话题。@Nawaz Welp,似乎我误解了那个。回到书本上来。