'new()'int和'int * p'之间的区别是什么?

时间:2016-08-06 14:38:52

标签: c++

如下代码:

int *p;
*p = 10;
int *q = new() int(10);

我想知道pq之间的区别。可以int *q = new() int(10)替换int *q; *q = 10吗? 非常感谢。

3 个答案:

答案 0 :(得分:0)

int *p;
*p = 10;

取消引用未初始化的指针有未定义的行为。

int *q = new() int(10);

这在语法上是不正确的,因为以下编译器消息显示:

main.cpp:7:18: error: expected expression-list or type-id
     int *q = new() int(10);
                  ^

所以,回答这个问题......

  

可以int *q = new() int(10)替换int *q; *q = 10吗?

没有。两者都不能在程序中的任何地方使用。

答案 1 :(得分:0)

int *p

这定义了指针p。由于未初始化,p指向未知的内存位置。

*p = 10;

这是尝试将内存位置设置为10.由于内存位置未知,这会导致未定义的行为。

将q初始化为10的正确代码是

int *q = new int;

这为int分配内存空间,然后使q指向此内存位置。

*q = 10;

这会将此内存位置初始化为10。

答案 2 :(得分:-1)

没有。它们远非一样。

此:

  

int * p;      * p = 10;

声明一个指向名为p的int的(未初始化的)指针。然后将值10分配给p指向的值。 这是“未定义的行为”,因为p未初始化。

此:

  

int * q = new()int(10);

声明一个int指针q并将其初始化为指向由new分配的存储空间,该存储空间为10个int分配了空间(如果我们在新的之后忽略语法不正确的“()”)。 / p>

总结一下:两者 - 如同书面的那样 - 是无效的,破碎的代码,但不一样。

注意:new(...)是“新位置”,这不是您想要的。