'new()' int和'int *p'有什么区别

what is the different between 'new()' int and 'int *p'

本文关键字:int 什么 区别 new      更新时间:2023-10-16

作为以下代码:

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

我想知道pq之间的区别。int *q = new() int(10)可以在任何地方被int *q; *q = 10取代吗?非常感谢。

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取代吗?

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

int *p

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

*p = 10;

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

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

int *q = new int;

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

*q = 10;

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

否。它们相差甚远。

此:

int*p;*p=10;

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

此:

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

声明一个int指针q,并将其初始化为指向new分配的存储,该存储已为10个int分配了空间(如果我们忽略new后面语法不正确的"(("(。

总结一下:这两种代码都是无效的、损坏的代码,但并不相同。

注意:new(...)是"新放置",这不是您想要的。