Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.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+处指针的值+;_C++_Pointers - Fatal编程技术网

C++ 声明C+处指针的值+;

C++ 声明C+处指针的值+;,c++,pointers,C++,Pointers,当我声明类似于 int *i = new int; 它(由编译器)初始化为什么值。如果我想确定它是零,我必须使用 int *i = new int(0); new会将所有内容初始化为零吗 在同一主题上,编译器将初始化什么,用户必须初始化什么(当涉及指针时)。这两个声明 int *i = new int; int *i = new int(0); 两者在动态分配内存(在堆中)的意义上是等价的。因此这两个指针都将被初始化。但是,在第一种情况下,内存本身没有初始化,并且具有一些任意值,而在第二

当我声明类似于

int *i = new int;
它(由编译器)初始化为什么值。如果我想确定它是零,我必须使用

int *i = new int(0);
new会将所有内容初始化为零吗

在同一主题上,编译器将初始化什么,用户必须初始化什么(当涉及指针时)。

这两个声明

int *i = new int;

int *i = new int(0);

两者在动态分配内存(在堆中)的意义上是等价的。因此这两个指针都将被初始化。但是,在第一种情况下,内存本身没有初始化,并且具有一些任意值,而在第二种情况下,内存(即分配的int类型的对象)由0初始化。

int*i=new int()
会将动态分配的
int
初始化为零。首先:为什么要这样做而不是
inti=0
int*i=新的int
不初始化由
i
@πάντα指向的对象ῥεῖ 我相信这只是一个例子。@πάνταῥεῖ
int
未初始化为零,即点。您需要
int*i=newint()更喜欢“动态分配内存”而不是“在堆上分配”。无论分配发生在“堆上”还是“堆栈上”或其他任何地方,都是一个不确定且完全无关的实现细节。重要的是程序的抽象语义和相应的行为和/或正确性。@user3477950我更新了我的帖子。