如下代码:
int *p;
*p = 10;
int *q = new() int(10);
我想知道p
和q
之间的区别。可以int *q = new() int(10)
替换int *q; *q = 10
吗?
非常感谢。
答案 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(...)
是“新位置”,这不是您想要的。